您的位置:首页 > 理论基础 > 计算机网络

ascyhttpclient 使用心得

2015-11-13 21:25 441 查看
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");[/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以上的大文件。还有其他上传文件的方法,框架,欢迎大家来补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 框架 网络