在iOS開發中有大名鼎鼎的ASIHttpRequest庫,用來處理網絡請求操做,今天要介紹的是一個在Android上一樣強大的網絡請求庫android-async-http,目前很是火的應用Instagram和Pinterest的Android版就是用的這個網絡請求庫。這個網絡請求庫是基於Apache HttpClient庫之上的一個異步網絡請求處理庫,網絡處理均基於Android的非UI線程,經過回調方法處理請求結果。android
AsyncHttpResponseHandler ——這是一個請求返回處理 成功 失敗 開始 完成 等自定義的消息的類json
BinaryHttpResponseHandler extends AsyncHttpResponseHandler ——繼承AsyncHttpResponseHandler的子類,這是一個字節流返回處理的類, 該類用於處理圖片等類。api
JsonHttpResponseHandler extends AsyncHttpResponseHandler ——繼承AsyncHttpResponseHandler的子類,這是一個json請求返回處理服務器與客戶端用json交流時使用的類.服務器
AsyncHttpRequest implements Runnable ——基於線程的子類,用於 異步請求類, 經過AsyncHttpResponseHandler回調。cookie
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();
接下來核心類。app
RetryHandler implements HttpRequestRetryHandler——這是一個多個線程同步處理的類異步
SerializableCookie implements Serializable——這是操做cookie 放入/取出數據的類async
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的請求模塊獲得幫助。