android开源框架android-async-http

这个很不错的第三方开源类库,针对Android开发中发送http请求的。

它的网络请求自动在非UI线程里执行,你不需要任何额外的操作(比如手动new一个Thread之类)。项目的官方网站:
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。其特性包括:
 
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。
 
1. 创建一个AsyncHttpClient;
 
2. (可选的)通过RequestParams对象设置请求参数;
 
3. 调用AsyncHttpClient的某个get方法,传递你需要的(成功和失败时)callback接口实现,一般都是匿名内部类,实现了AsyncHttpResponseHandler,类库自己也提供了好些现成的response handler,你一般不需要自己创建一个。
 
代码示例:
 1 import com.loopj.android.http.*;
 2 
 3 public class TwitterRestClient {
 4   private static final String BASE_URL = "http://api.twitter.com/1/";
 5 
 6   private static AsyncHttpClient client = new AsyncHttpClient();
 7 
 8   public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
 9       client.get(getAbsoluteUrl(url), params, responseHandler);
10   }
11 
12   public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {
13       client.post(getAbsoluteUrl(url), params, responseHandler);
14   }
15 
16   private static String getAbsoluteUrl(String relativeUrl) {
17       return BASE_URL + relativeUrl;
18   }
19 }
 1 import org.json.*;
 2 import com.loopj.android.http.*;
 3 
 4 class TwitterRestClientUsage {
 5     public void getPublicTimeline() throws JSONException {
 6         TwitterRestClient.get("statuses/public_timeline.json", null, new JsonHttpResponseHandler() {
 7             @Override
 8             public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
 9                 // If the response is JSONObject instead of expected JSONArray
10             }
11             
12             @Override
13             public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {
14                 // Pull out the first event on the public timeline
15                 JSONObject firstEvent = timeline.get(0);
16                 String tweetText = firstEvent.getString("text");
17 
18                 // Do something with the response
19                 System.out.println(tweetText);
20             }
21         });
22     }
23 }

 

posted @ 2015-05-12 10:52  安谧世界  阅读(500)  评论(0编辑  收藏  举报