ascyhttpclient 使用心得
2015-11-13 21:25
441 查看
asyhttpclient是一个轻量级的异步网络框架,官方介绍在这里,github地址,从上面两个地方可以很轻松的了解并使用这个框架
android studio可以在gradle中加入
dependencies
{
}
eclispe可以在上面的网址中下载jar导入到工程中。
这里简单介绍一下框架的特性,有兴趣的同学可以自己了解
(1)采用异步http请求,并通过匿名内部类处理回调结果
(2)http请求独立在UI主线程之外
(3)采用线程池来处理并发请求
(4)采用RequestParams类创建GET/POST参数
(5)不需要第三方包即可支持Multipart file文件上传
(6)大小只有25kb
(7)自动为各种移动电话处理连接断开时请求重连
(8)超快的自动gzip响应解码支持
(9)使用BinaryHttpResponseHandler类下载二进制文件(如图片)
(10) 使用JsonHttpResponseHandler类可以自动将响应结果解析为json格式
(11)持久化cookie存储,可以将cookie保存到你的应用程序的SharedPreferences中
官网给出的这几个特性如果没有深刻的体会的话,那你可以先入手试试使用一下体会会更深
给出的例子很简单:
1.get方法
2 post方法
在这里我使用了这个框架上传到服务器一张图片,回调onsuccess,但是却上传图片失败,这里贴出我在stack overflow找的方法,给大家一点经验
经验1:
log显示我上传的文件需要是一张图片,原来是我的params定义的有问题,
android studio可以在gradle中加入
dependencies
{
compile 'com.loopj.android:android-async-http:1.4.9'
}
eclispe可以在上面的网址中下载jar导入到工程中。
这里简单介绍一下框架的特性,有兴趣的同学可以自己了解
(1)采用异步http请求,并通过匿名内部类处理回调结果
(2)http请求独立在UI主线程之外
(3)采用线程池来处理并发请求
(4)采用RequestParams类创建GET/POST参数
(5)不需要第三方包即可支持Multipart file文件上传
(6)大小只有25kb
(7)自动为各种移动电话处理连接断开时请求重连
(8)超快的自动gzip响应解码支持
(9)使用BinaryHttpResponseHandler类下载二进制文件(如图片)
(10) 使用JsonHttpResponseHandler类可以自动将响应结果解析为json格式
(11)持久化cookie存储,可以将cookie保存到你的应用程序的SharedPreferences中
官网给出的这几个特性如果没有深刻的体会的话,那你可以先入手试试使用一下体会会更深
给出的例子很简单:
1.get方法
AsyncHttpClient client = new AsyncHttpClient(); client.get("https://www.google.com", new AsyncHttpResponseHandler() { @Override public void onStart() { // called before request is started } @Override public void onSuccess(int statusCode, Header[] headers, byte[] response) { // called when response HTTP status is "200 OK" } @Override public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable e) { // called when response HTTP status is "4XX" (eg. 401, 403, 404) } @Override public void onRetry(int retryNo) { // called when request is retried } });
2 post方法
client.post(getAbsoluteUrl(url), params, responseHandler);
你可以自己定义请求的params,可以是以下几种
RequestParams params = new RequestParams(); params.put("key", "value"); params.put("more", "data");或者是一个文件
File myFile = new File("/path/to/file.png"); RequestParams params = new RequestParams(); try { params.put("profile_picture", myFile); } catch(FileNotFoundException e) {}
在这里我使用了这个框架上传到服务器一张图片,回调onsuccess,但是却上传图片失败,这里贴出我在stack overflow找的方法,给大家一点经验
经验1:
log显示我上传的文件需要是一张图片,原来是我的params定义的有问题,
params.put("image", file, "image/jpeg","test.jpg");[/code] 第三个参数是指定content-type,大家可以根据要上传的文件不同定义不同的类型,常见的是application/json 和image/jpeg等类型 经验2: 如果网络请求超时,可以自定义网络请求时间:client.setTimeout(36000);
后面的时间依情况自己决定
经验3:
上传大图片的时候有可能会出现这种异常
这时候需要把回调接口写完整再来观察输出,如下所示
这时候可以看到输出如下:
11-13 22:00:14.499 28745-28745/com.hcii.facedavinci D/Callback: onFailure String
说明大图片的时候还是会有问题,有解释说因为RequestParams这个类创建了一个无缓存的ByteArrayEntity
来传递POST或者GET请求,当文件很大的时候,非常容易发生OutOfMemory 错误,通常以经验来看不大于4M或者5M比较合适,所以说这个框架无修改的比较适合用于小文件下载传输,如果想传输大文件的话,使用apache
mime library中的MultipartEntity 用来传递POST或者GET请求,这种方法可以上传100M以上的大文件。还有其他上传文件的方法,框架,欢迎大家来补充。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件