Android-Async-Http使用记录
介绍:
Android-Async-Http是一个Android的开源网络请求类库。官方项目地址:http://loopj.com/android-async-http/。网络请求无非就是从服务器上获取数据,往服务器上上传数据,这个网络请求库是基于Apache HttpClient库之上的一个异步网络请求处理库,网络处理均基于Android的非UI线程,不会阻塞主UI线程,并且通过回调方法处理请求结果。Android-Async-Http处理正常的获取内容,下载,上传,包括带cookies访问都是没有问题的,大名鼎鼎的Instagram就是用的这个类库。
使用:
从官网下载依赖jar包,导入工程中libs文件夹下并添加到工程路径即可。
先看一下基本用法:
AsyncHttpClient client = new AsyncHttpClient(); client.get("http://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 } });可以看出,所有的网络请求都是通过AsyncHttpClient实例来实现的。
类库的目录结构如图:
先看下主要的类的介绍:
- AsyncHttpClient:异步请求客户端,类库进行网络请求的实例
- AsyncHttpRequest:继承Runnabler,被submit至线程池执行网络请求并发送start,success等消息
- AsyncHttpResponseHandler:处理网络请求成功 失败 开始 完成 等自定义的消息
- BaseJsonHttpResponseHandler:继承TextHttpResponseHandler,是一个泛型类,提供了parseResponse方法,子类需要提供实现,将请求结果解析成需要的类型。
- BinaryHttpResponseHandler :继承 AsyncHttpResponseHandler ,字节流返回处理 该库用于处理图片等
- JsonHttpResponseHandler:继承TextHttpResponseHandler,同样是重写onSuccess和onFailure方法,将请求结果由String转换为JSONObject或JSONArray
- SerializableCookie:集成 Serializable,用于序列化cookie,以便存取cookie
- TextHttpResponseHandler:继承AsyncHttpResponseHandler,重写了AsyncHttpResponseHandler的onSuccess和onFailure方法,将请求结果由byte数组转换为String
官方建议使用一个静态的AsyncHttpClient,官方示例:
public class TwitterRestClient { private static final String BASE_URL = "http://api.twitter.com/1/"; private static AsyncHttpClient client = new AsyncHttpClient(); public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { client.get(getAbsoluteUrl(url), params, responseHandler); } public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) { client.post(getAbsoluteUrl(url), params, responseHandler); } private static String getAbsoluteUrl(String relativeUrl) { return BASE_URL + relativeUrl; } }在用的时候,我们可以直接通过类名调用需要的请求方法,你可以多封装一些不同的请求方法,比如参数不同的方法,下载方法,上传方法等。
这是我自己的封装好的一些常用的方法:
public class HttpUtil { private static AsyncHttpClient httpclient = new AsyncHttpClient(); static{ httpclient.setTimeout(5000); } public static void get(String urlString,AsyncHttpResponseHandler res) //用一个完整url获取一个string对象 { httpclient.get(urlString, res); } public static void get(String urlString,RequestParams params,AsyncHttpResponseHandler res) //url里面带参数 { httpclient.get(urlString, params,res); } public static void get(String urlString,JsonHttpResponseHandler res) //不带参数,获取json对象或者数组 { httpclient.get(urlString, res); } public static void get(String urlString,RequestParams params,JsonHttpResponseHandler res) //带参数,获取json对象或者数组 { httpclient.get(urlString, params,res); } public static void get(String uString, BinaryHttpResponseHandler bHandler) //下载数据使用,会返回byte数据 { httpclient.get(uString, bHandler); } public static void post(String uString,RequestParams params, JsonHttpResponseHandler bHandler) //post数据使用,会返回json数据 { httpclient.post(uString,params,bHandler); } public static void post(String uString,RequestParams params,AsyncHttpResponseHandler res) //post数据使用,返回普通的手 { httpclient.post(uString, params,res); } public static AsyncHttpClient getClient() { return httpclient; } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。