在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可以发起返回结果为字符串的请求,一般这个使用较多。



更多相关文章

  1. Activity生命周期的回调,你应该知道得更多!--Android源码剖析(上)
  2. E/错误(3907): android.view.ViewRootImpl$CalledFromWrongThrea
  3. Android(安卓)DVM
  4. Android开发规范:API接口通用设计规范
  5. 有关Android线程的学习
  6. Android深入浅出之Binder机制
  7. 如何将Eclipse中的项目迁移到Android(安卓)Studio 中
  8. 强烈推荐:Android史上最强大的自定义任务软件Tasker
  9. Asynchronous HTTP Requests in Android(安卓)Using Volley

随机推荐

  1. 转---Android Audio System 之一:AudioTra
  2. Android弹出键盘布局闪动原理和解决
  3. Android(安卓)TextView预渲染研究
  4. Android(安卓)BOOT Time 优化
  5. Android是个好系统
  6. Android开发高薪之路 蜂窝教育与您同行
  7. Android自定义扁平化对话框
  8. Android学习笔记(二) 布局方式的介绍
  9. Android:Material Design兼容库(Design S
  10. android List拖动时背景为黑色问题