標籤:
這個很不錯的第三方開源類庫,針對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 JSONArray10 }11 12 @Override13 public void onSuccess(int statusCode, Header[] headers, JSONArray timeline) {14 // Pull out the first event on the public timeline15 JSONObject firstEvent = timeline.get(0);16 String tweetText = firstEvent.getString("text");17 18 // Do something with the response19 System.out.println(tweetText);20 }21 });22 }23 }
android開源架構android-async-http