Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 淺論Android網絡請求庫——android-async-http

淺論Android網絡請求庫——android-async-http

編輯:關於Android編程

在iOS開發中有大名鼎鼎的ASIHttpRequest庫,用來處理網絡請求操作,今天要介紹的是一個在Android上同樣強大的網絡請求庫android-async-http,目前非常火的應用Instagram和Pinterest的Android版就是用的這個網絡請求庫。這個網絡請求庫是基於Apache HttpClient庫之上的一個異步網絡請求處理庫,網絡處理均基於Android的非UI線程,通過回調方法處理請求結果。   其主要特征如下:處理異步Http請求,並通過匿名內部類處理回調結果,Http異步請求均位於非UI線程,不會阻塞UI操作,通過線程池處理並發請求處理文件上傳、下載,響應結果自動打包JSON格式. 自動處理連接斷開時請求重連.使用android-async-http也非常簡單,到官網http://loopj.com/android-async-http/下載依賴jar包,導入工程中libs文件夾下並添加到工程路徑即可。通過下面的代碼來創建一個異步請求: 首先,我們分析一下相應核心的操作類。 AsyncHttpResponseHandler ——這是一個請求返回處理  成功 失敗 開始  完成  等自定義的消息的類   BinaryHttpResponseHandler extends AsyncHttpResponseHandler ——繼承AsyncHttpResponseHandler的子類,這是一個字節流返回處理的類, 該類用於處理圖片等類。   JsonHttpResponseHandler extends AsyncHttpResponseHandler ——繼承AsyncHttpResponseHandler的子類,這是一個json請求返回處理服務器與客戶端用json交流時使用的類.   AsyncHttpRequest implements Runnable ——基於線程的子類,用於 異步請求類, 通過AsyncHttpResponseHandler回調。   PersistentCookieStore implements CookieStore ——這是一個基於CookieStore的子類, 使用HttpClient處理數據,並且使用cookie持久性存儲接口。    RequestParams ——封裝了參數處理  例如:   復制代碼 * RequestParams params = new RequestParams(); * params.put("username", "james"); * params.put("password", "123456"); * params.put("email", "[email protected]"); * params.put("profile_picture", new File("pic.jpg")); // Upload a File * params.put("profile_picture2", someInputStream); // Upload an InputStream * params.put("profile_picture3", new ByteArrayInputStream(someBytes)); // Upload some bytes * * AsyncHttpClient client = new AsyncHttpClient(); 復制代碼 接下來核心類。   RetryHandler implements HttpRequestRetryHandler——這是一個多個線程同步處理的類   SerializableCookie implements Serializable——這是操作cookie 放入/取出數據的類   SimpleMultipartEntity implements HttpEntity——用於處理多個請求實體封裝   SyncHttpClient extends AsyncHttpClient——同步客戶端請求的類   AsyncHttpClient——異步客戶端請求的類   介紹了這些核心類之後,我們主要看看他的用法:   這是普通get方式來返回相應字符串的代碼:   復制代碼 AsyncHttpClient client = new AsyncHttpClient();                   client.get("http://www.baidu.com", new AsyncHttpResponseHandler() {                                              @Override                       public void onSuccess(String response) {                           System.out.println(response);                           textView.setText(response);                       }                                              @Override                       public void onStart() {                           super.onStart();                           System.out.println("onStart");                       }                                              @Override                       public void onFinish() {                           super.onFinish();                           System.out.println("onFinish");                       }                                          }     復制代碼 同時,請求方式還支持POST和PUT,請求的同時還支持參數傳遞,下面看看如何通過JSON字符串作為參數訪問服務器:   復制代碼 try {                       JSONObject jsonObject = new JSONObject();                       jsonObject.put("username", "ryantang");                       StringEntity stringEntity = new StringEntity(jsonObject.toString());                       client.post(MainActivity.this, "http://api.com/login", stringEntity, "application/json", new JsonHttpResponseHandler(){                              @Override                           public void onSuccess(JSONObject jsonObject) {                               super.onSuccess(jsonObject);                                                          }                                                  });                   } catch (JSONException e) {                       e.printStackTrace();                   } catch (UnsupportedEncodingException e) {                       e.printStackTrace();                   }   復制代碼 除此之外,還能夠支持相應文件圖片上傳的話。相應的源代碼如下:   復制代碼     String path="http://sv1.livechano.com:8080/upload.action?&action=1.6&type=1&ext=png";         File myFile = new File("/sdcard/test.png");         RequestParams params = new RequestParams();         try {               params.put("image", myFile,"application/octet-stream");                          AsyncHttpClient client = new AsyncHttpClient();                          client.post(path, params, new AsyncHttpResponseHandler(){                                  @Override                 public void onFailure(Throwable error, String content) {                     // TODO Auto-generated method stub                     super.onFailure(error, content);                     Toast.makeText(MainActivity.this, "上傳失敗!"+content, Toast.LENGTH_LONG).show();                 }                                  @Override                 public void onSuccess(int statusCode, String content) {                     // TODO Auto-generated method stub                     super.onSuccess(statusCode, content);                     System.out                             .println("content:    "+content);                     Toast.makeText(MainActivity.this, "上傳成功!"+content, Toast.LENGTH_LONG).show();                 }                                               });                      } catch(FileNotFoundException e) {                      } 復制代碼 注意了,這種方法上傳的參數一定要 設置params.put("image", myFile,"application/octet-stream");否則就會失敗。   當然,android-async-http還有很多用法,這裡不做過多贅述了。希望android-async-http能夠大家以後android的請求模塊得到幫助。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved