项目的官方网站:

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。

大概翻译了下,这些只是大体的概览,具体的细节还得在使用过程中慢慢感受、学习。

  接下来,带领大家看看应用android-async-http来写代码是个啥样子。简单来说你只需要3步,

1. 创建一个AsyncHttpClient;

2. (可选的)通过RequestParams对象设置请求参数;

3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类

,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。

来看看代码如何写:

复制代码
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    }});
复制代码

是不是很简洁,有没有被震撼到?反正我自己第一次看到的时候有种相见恨晚的感觉,这简直就是我日思夜想的方式啊!这里你只需要通过

匿名内部类的方式实现AsyncHttpResponseHandler,而且更棒的是你只需要override感兴趣的方法,比如一般都是onSuccess和onFailure。

这个版本的get方法没有为请求传递任何参数,当然你也可以通过RequestParams来传递各种参数,如下:

复制代码
AsyncHttpClient client = new AsyncHttpClient();RequestParams params = new RequestParams();params.put("key", "value");params.put("more", "data");client.get("http://www.google.com", params, new    AsyncHttpResponseHandler() {        @Override        public void onSuccess(int statusCode, Header[] headers, byte[] response) {            System.out.println(response);        }        @Override        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {            Log.d("ERROR", error);        }        });
复制代码

以上的例子是返回的response直接是原生字节流的情况,如果你需要把返回的结果当一个String对待,这时只需要匿名实现一个

TextHttpResponseHandler就行,其继承自AsyncHttpResponse,并将原生的字节流根据指定的encoding转化成了string对象,

代码如下:

复制代码
AsyncHttpClient client = new AsyncHttpClient();RequestParams params = new RequestParams();params.put("key", "value");params.put("more", "data");client.get("http://www.google.com", params, new    TextHttpResponseHandler() {        @Override        public void onSuccess(int statusCode, Header[] headers, String response) {            System.out.println(response);        }        @Override        public void onFailure(int statusCode, Header[] headers, String responseBody, Throwable error) {            Log.d("ERROR", error);        }        });
复制代码

同样的方式,你可以发送json请求,代码如下:

复制代码
String url = "https://ajax.googleapis.com/ajax/services/search/images";AsyncHttpClient client = new AsyncHttpClient();RequestParams params = new RequestParams();params.put("q", "android");params.put("rsz", "8");client.get(url, params, new JsonHttpResponseHandler() {                @Override    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {       // Handle resulting parsed JSON response here    }    @Override    public void onSuccess(int statusCode, Header[] headers, JSONArray response) {      // Handle resulting parsed JSON response here    }});
复制代码

看到了没,返回的response已经自动转化成JSONObject了,当然也支持JSONArray类型,override你需要的那个版本就行。

  有了AsyncHttpClient,要实现这些功能是不是很简单呢?当然这里只是很初级的介绍和使用,剩下的还需要开发者自己参考官方

文档、源码(官方甚至提供了一个Sample使用的集合),在实际项目中实践。最后,强烈建议大家使用,是时候和冗长乏味的代码说

再见了。我一直是分析源码的,这次也不例外,实现上的关键代码我会在接下来的博客中专门介绍,敬请期待,enjoy。。。


相关资源:http://blog.csdn.net/u013991521/article/details/48375283

更多相关文章

  1. [Android]代码实现ColorStateList及StateListDrawable
  2. Android 完全退出应用程序实现代码
  3. Eclipse中跟踪调试Android Framework源代码
  4. Android子线程真的不能更新UI么
  5. [Android]Thread线程入门1
  6. Android Studio 手动创建活动(Activity) 第一行代码 第二章

随机推荐

  1. Android之录音工具类
  2. Android APK安装常见错误
  3. android控制PC
  4. Android文字跑马灯控件(文本自动水平滚动)
  5. 49 Android fragment 自定义适配器adapte
  6. android中view的宽高测量
  7. Android显示GIF动画的几种方法
  8. Android自动弹出软键盘
  9. BIOS中开启虚拟化技术
  10. Android 双击返回键退出功能的实现