Adison's Notes
為什麼使用Volley
Android提供了兩個HTTP庫給開發者來進行實現一個HTTP請求,一個是AndroidHttpClient(從apache HttpClient拓展而來),另一個是HttpUrlConnection。兩者都互有優缺點。當我們開發一個應用,一般來說,我們會寫一些Http連線類,這些類可以處理所有Http請求,建立後臺執行緒,管理執行緒池,解析response,快取response,處理異常狀態碼、SSL連線,實現並行或者序列請求。每一個開發者都有自己的方式去實現這些方法。有些人可能會用AsycnTask在後臺完成網路請求,有些人可能經過處理程式從UI執行緒建立
但是我們最終會重複編寫相同的樣板程式碼,我們試圖在我們的應用程式重複造輪子。
例如,下面的程式碼片段,在AysncTask的doBackground裡實現一個HTTP請求。當我們獲取response,把資料從HttpUrlConnection的輸入流拷貝到輸出流,然後把輸出流再轉化成我們最終想要的JsonObject。所有這些樣板程式碼在我們的程式碼中重複出現。
HttpURLConnection urlConnection = null; try { URL url = new URL("http://www.android.com/"); urlConnection = (HttpURLConnection) url.openConnection(); InputStream in = new BufferedInputStream(urlConnection.getInputStream()); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; // Adjust if you want int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } JSONObject resultJSON = new JSONObject(outputStream.toString()); }catch (Exception e) { e.printStackTrace(); } finally { urlConnection.disconnect(); }
所以谷歌提出volley,幫助開發人員處理相關的所有網路操作,這樣開發人員可以集中精力實現HTTP響應後的業務邏輯。從而可以更少的網路程式碼呼叫,這樣可以幫助開發者減少bug數量。
注意Volley在大檔案操作中並不很適用,如上傳/下載,這些case,還需要使用原始的方法
以下是Volley的一些關鍵特性:
為Android提供更快的網路請求
在後臺執行緒中排程、並行實現所有HTTP請求並管理這些執行緒
提供靈活的方法來同步併發執行你的網路請求
帶有內建的Json解析器
可以設定請求的優先順序
為某些情況提供重試策略,如超時,內部伺服器錯誤
可以很靈活的取消請求
提供圖片的記憶體和磁碟快取,批量處理下載
可以很靈活的實現自己的快取
可以實現自己的HTTPStack(處理SSL連線,PATCH請求)
請求可以跟蹤除錯
可以和Activity和生命週期的聯動(Activity結束時同時取消所有網路請求)
整合Volley專案
可以通過兩種方式整合
生成Volley.jar,放到libs目錄
把volley專案作為一個library依賴
從git資源庫Clone Volley專案:
使用Volley主要涉及連個類RequestQueue和Request
RequestQueue ---排程請求佇列並在工作執行緒執行請求,然後響應給主執行緒
Request---所有的網路請求都可以通過此類來建立,它提供了一個HTTP請求所需的主要引數,譬如:
請求型別-GET,POST,PUT,DELETE
URL
請求資料(HTTP Body)
成功響應監聽
錯誤監聽
簡單使用
初始化RequestQueue
JsonObjectRequest
StringRequest
GsonRequest
當然你也可以自定義Request,使得其可以返回對應的Java型別。譬如,我們可以用Gson來自定義一個Request。
使用的時候和StringRequest和JsonObjectRequest差不多