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,官方示例:
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; } }
原文地址:http://blog.csdn.net/u012782626/article/details/41308505