[置顶] Android使用AsyncHttpClient上传多个文件
2016-10-08 20:27
645 查看
在Android开发中,网络请求的方式有很多,如果运用httpclient自定义的话,代码很多,而且不容易理解。当然,自定义请求可以帮助你更好的深入理解底层源码。但在实战开发中并不适用。
在Android中一般比较常见的网络请求框架大致有:
1.Volley框架:它是谷歌在2013年推出的网络请求框架,他适用于数据比较简单,但请求比较频繁的操作,也就是说,他的并发性很好,但是在大型的文件或数据交互时就会很糟糕。
2.okhttp框架:在开发的过程中,它还是非常高效的,它适用于android2.3以上。
3.xutils:缓存网络请求数据。
4.android-async-http框架:在该框架中,核心的类就是AsyncHttpClient,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。
当然,还有很多网络请求的框架,我在这里就不一一列举出来了。下面是我再开发过程中运用到的一段关于异步上传图片或视频文件的资料,希望对大家有所帮助。
首先要导入架包:
完成架包的导入后代码如下:
因为是上传文件,所以少不了以下权限:
运行效果图:
在上面代码中没有写出上传文件的进度条,后期会慢慢完善。
在Android中一般比较常见的网络请求框架大致有:
1.Volley框架:它是谷歌在2013年推出的网络请求框架,他适用于数据比较简单,但请求比较频繁的操作,也就是说,他的并发性很好,但是在大型的文件或数据交互时就会很糟糕。
2.okhttp框架:在开发的过程中,它还是非常高效的,它适用于android2.3以上。
3.xutils:缓存网络请求数据。
4.android-async-http框架:在该框架中,核心的类就是AsyncHttpClient,使用HttpClient执行网络请求,提供了get,put,post,delete,head等请求方法,使用起来很简单,只需以url及RequestParams调用相应的方法即可,还可以选择性地传入Context,用于取消Content相关的请求,同时必须提供ResponseHandlerInterface(AsyncHttpResponseHandler继承自ResponseHandlerInterface)的实现类,一般为AsyncHttpResponseHandler的子类,AsyncHttpClient内部有一个线程池,当使用AsyncHttpClient执行网络请求时,最终都会调用sendRequest方法,在这个方法内部将请求参数封装成AsyncHttpRequest(继承自Runnable)交由内部的线程池执行。
当然,还有很多网络请求的框架,我在这里就不一一列举出来了。下面是我再开发过程中运用到的一段关于异步上传图片或视频文件的资料,希望对大家有所帮助。
首先要导入架包:
完成架包的导入后代码如下:
package com.wujie.uploadfile; import java.io.File; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.List; import org.apache.http.Header; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.Volley; import com.loopj.android.http.AsyncHttpClient; import com.loopj.android.http.AsyncHttpResponseHandler; import com.loopj.android.http.RequestParams; import com.wujie.config.Configtest; import com.wujie.volleyall.R; import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class UploadFileActivity extends Activity{ private Button upload; private TextView pro; ProgressDialog ProgressDialo;//监控上传文件进度 int count; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.uploadfile); //初始化数据 upload=(Button) findViewById(R.id.upload_btn); pro=(TextView) findViewById(R.id.upload_tv); upload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub try { postFile();//上传文件 } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); } /** * 上传多个文件 * @throws Exception */ public void postFile() throws Exception{ String path ="sdcard/Download/cache_files/kabuka_201.apk"; String path2 ="sdcard/DCIM/mm.jpg"; File file = new File(path); File file2 = new File(path2); if(file.exists() && file.length()>0){ System.out.println("文件找到!"); //创建异步请求对象 AsyncHttpClient client = new AsyncHttpClient(); //将要上传的文件放入RequestParams对象中 RequestParams params = new RequestParams(); params.put("file1", file); params.put("file2", file2); params.put("content", "wujie"); //发起post请求 client.post(Configtest.WUJIELOADURL, params,new AsyncHttpResponseHandler() { //上传失败监听方法 @Override public void onFailure(int arg0, Header[] arg1, byte[] arg2, Throwable arg3) { // TODO Auto-generated method stub Toast.makeText(UploadFileActivity.this, "失败", Toast.LENGTH_LONG).show(); } //上传成功监听方法 @Override public void onSuccess(int arg0, Header[] arg1, byte[] arg2) { // TODO Auto-generated method stub Toast.makeText(UploadFileActivity.this, "成功", Toast.LENGTH_LONG).show(); } //上传过程中的进度 @Override public void onProgress(int bytesWritten, int totalSize) { // TODO Auto-generated method stub super.onProgress(bytesWritten, totalSize); count = (int) ((bytesWritten * 1.0 / totalSize) * 100); Log.i("上传 Progress>>>>>", count + " / "); } @Override public void onRetry(int retryNo) { // TODO Auto-generated method stub super.onRetry(retryNo); // 返回重试次数 } }); }else{ Toast.makeText(UploadFileActivity.this, "文件不存在", 1).show(); } } }
因为是上传文件,所以少不了以下权限:
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
运行效果图:
在上面代码中没有写出上传文件的进度条,后期会慢慢完善。
相关文章推荐
- Android 使用开源框架AsyncHttpClient上传文件到服务器
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
- android 使用AsyncHttpClient框架上传文件以及使用HttpURLConnection下载文件
- Android 文件上传 使用AsyncHttpClient开源框架
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android-async-http使用一个参数上传多个文件
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android使用AsyncHttpClient上传图片以及参数到服务器
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- 【Android基础知识】使用Http和HttpClient上传文件
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- android开源框架andorid-async-http使用(下载上传文件)
- android开源框架andorid-async-http使用(下载上传文件)
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- Golang+Android(使用HttpURLConnection)实现文件上传
- Android开源框架--AsyncHttpClient (android-async-http)使用