Android 之AsyncHttpClient

在Android开发中,与服务器通讯主要是基于Http协议来进行的.Android自己为我们提供了URLHttpConnection类来处理网络访问的问题,但是这个类的确不是很好用.今天简绍一个在Android开发中被使用的非常广泛的一个专门针对Android 的网络编程这一块的一个框架.Android-async-http.

项目的官方网站:http://loopj.com/android-async-http/,
对应的github地址:https://github.com/loopj/android-async-http

它是专门针对Android在Apache的HttpClient基础上构建的异步的callback-based http client。

所有的请求全在UI线程之外发生,而callback发生在创建它的线程中,应用了Android的Handler发送消息机制。

你也可以把AsyncHttpClient应用在Service中或者后台线程中,库代码会自动识别出它所运行的context。

它的feature包括:
 
1. 发送异步http请求,在匿名callback对象中处理response;
 
2. http请求发生在UI线程之外;
 
3. 内部采用线程池来处理并发请求;
 
4. GET/POST 参数构造,通过RequestParams类。
 
5. 内置多部分文件上传,不需要第三方库支持;
 
6. 流式Json上传,不需要额外的库;
 
7. 能处理环行和相对重定向;
 
8. 和你的app大小相比来说,库的size很小,所有的一切只有90kb;
 
9. 自动智能的请求重试机制在各种各样的移动连接环境中;
 
10. 自动的gzip响应解码;
 
11. 内置多种形式的响应解析,有原生的字节流,string,json对象,甚至可以将response写到文件中;
 
12. 永久的cookie保存,内部实现用的是Android的SharedPreferences;
 
13. 通过BaseJsonHttpResponseHandler和各种json库集成;
 
14. 支持SAX解析器;
 
15. 支持各种语言和content编码,不仅仅是UTF-8。

官方建议使用一个静态的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;
    }
}
总结:

Android-Async-Http的使用非常简单,通过AsyncHttpClient发起请求就可以了,如果需要添加参数,直接传一个RequestParams过去,而且参数可以是String、File和InputStream,可以很方便地上传文件。

每个请求都需要传一个ResponseHandlerInterface的实例用以接收请求结果或请求失败,请求结束等通知,一般是AsyncHttpResponseHandler的子类。

通过BinaryHttpResponseHandler可以发起二进制请求,如请求图片。

通过TextHttpResponseHandler可以发起返回结果为字符串的请求,一般这个使用较多。



你可能感兴趣的:(android进阶,Android,AsyncHttpCli)