ascyhttpclient 使用心得

asyhttpclient是一个轻量级的异步网络框架,官方介绍在这里github地址,从上面两个地方可以很轻松的了解并使用这个框架

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");
第三个参数是指定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以上的大文件。还有其他上传文件的方法,框架,欢迎大家来补充。



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值