Android loopj 文件上传

本文是基于loopj (Asynchronous Http Client for Android) 的文件上传Demo


1、loopj 是基于 Apache's HttpClient 的异步http客户端


2、在项目中引用loopj ,用gradle方式

compile 'com.loopj.android:android-async-http:1.4.9'


3、权限配置

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


4、上传实现

public class MainActivity extends AppCompatActivity {

    private static final String root = new String(Environment.getExternalStorageDirectory().getPath() + File.separator);
    private String uploadURL = "http://192.168.155.6:8080/upload/UploadServlet";
    private Button buttonUpload;
    private ProgressDialog progressDialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonUpload = (Button) findViewById(R.id.bt_upload);
        buttonUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                uploadFile();
            }
        });
    }

    private void uploadFile() {
        progressDialog = new ProgressDialog(this);
        String path = root + "code.rar";
        File file = new File(path);
        if (file.exists() && file.length() > 0) {
            try {
                AsyncHttpClient client = new AsyncHttpClient();
                RequestParams requestParams = new RequestParams();
                requestParams.put("code.rar", file);
                client.post(uploadURL, requestParams, new AsyncHttpResponseHandler() {

                    @Override
                    public void onProgress(long bytesWritten, long totalSize) {
                        super.onProgress(bytesWritten, totalSize);
                        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                        progressDialog.setMessage("我在努力上传中。。。");
                        progressDialog.show();
                        progressDialog.setMax((int) totalSize);
                        progressDialog.setProgress((int) bytesWritten);
                    }

                    @Override
                    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                        Toast.makeText(MainActivity.this, "上传成功", Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                    }

                    @Override
                    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                        Toast.makeText(MainActivity.this, "上传失败", Toast.LENGTH_SHORT).show();
                        progressDialog.dismiss();
                    }
                });
            } catch (Exception e) {
                Toast.makeText(this, "上传失败", Toast.LENGTH_SHORT).show();
                e.printStackTrace();
            }
        } else {
            Toast.makeText(this, "文件不存在或者内容为空", Toast.LENGTH_SHORT).show();
        }
    }
}

5、布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fun.uploaddemo.MainActivity">

    <Button
        android:id="@+id/bt_upload"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="文件上传"/>

</RelativeLayout>

6、运行截图



7、源码下载

CSDN下载地址


发布了34 篇原创文章 · 获赞 12 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/hfrommane/article/details/51242920