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

來源:互聯網
上載者:User

在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", "my@email.com");* 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的請求模組得到協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.