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可以發起返回結果爲字符串的請求,一般這個使用較多。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章