標籤:icon exce tostring blank 大量 queue sid lan 代碼
1.回想
上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 寫了 電影列表的範例
2.重點
(1)封裝Volley 內部 請求 類(請求隊列,資料請求,圖片請求,圖片緩衝)
(2)封裝 Response.Listener 和 Response.ErrorListener 回呼函數
(3)用法
3.檔案夾介紹
3.1 GsonRequset.java
自己定義Gson請求,直接將 Json字串 執行個體化為 對象
3.2 VolleyApplication.java
繼承Application , 單例模式 建立 RequestQueue
3.3 VolleyBitmapCache.java
與LruCachae 結合 ,實現圖片緩衝,使得不發生 記憶體溢出
3.4 VolleyHandler.java
實現Response.Lintener 和 Response.ErrorLinstener 的監聽 ,並返回 onSuccess 和 onError兩個回呼函數
3.5 VolleyHttpPath.java
封裝 請求地址,能夠在這裡面封裝請求地址。統一管理 請求地址
3.6 VolleyHttpRequest.java
封裝全部的請求調用 請求隊列。資料請求。圖片請求
3.7 README
用法
4.VolleyHandler 回呼函數 類實現
4.1 使用抽象類別實現
4.2 聲明兩個抽象方法 OnSuccess 和 OnError
4.3 實現Response.Listener 和 Response.ErrorListener
4.4 示範範例:
package com.example.volley;import com.android.volley.Response;import com.android.volley.VolleyError;/** * 抽象出 成功的監聽和失敗的監聽 * 用來回調資訊 * @author yuan * * @param <T> */public abstract class VolleyHandler<T> {public Response.Listener<T> reqLis;public Response.ErrorListener reqErr;public VolleyHandler() {// 初始化 變數reqLis = new reqListener();reqErr = new reqErrorListener();}public abstract void reqSuccess(T response);public abstract void reqError(String error);/** * 成功後的監聽 * * @author yuan * */public class reqListener implements Response.Listener<T> {@Overridepublic void onResponse(T response) {// 使用抽象函數 設定 回呼函數 reqSuccessreqSuccess(response);}}/** * 失敗後的監聽 * * @author yuan * */public class reqErrorListener implements Response.ErrorListener {@Overridepublic void onErrorResponse(VolleyError error) {// 設定回呼函數 使用 抽象方法 ReqErrorreqError(error.getMessage());}}}
其餘的實現我就不解釋了,能夠下載使用:http://download.csdn.net/detail/lablenet/9035389
5.使用方式
5.1 準備篇
下載Volley.jar 包 :Volley.jar
下載我的二次封裝類:Volley二次封裝
5.2 配置請求隊列
在AndroidManifest.xml裡 的Application標籤下的第一行 :新添(name中為 VolleyApplication 的包名稱)
android:name="com.example.volley.VolleyApplication"
比方:
<application <span style="color:#ff0000;">android:name="com.example.volley.VolleyApplication"</span> android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter>
5.3 基本資料請求(String,JsonObject,Gson,Bitmap 等)
執行個體化 VolleyHandler類 ,比如:
這裡請求的是 String 故 T 傳參為 String , 圖片使用ImageRequest的話傳參:Bitmap
VolleyHandler<String> volleyRequest=new VolleyHandler<String>() {@Overridepublic void reqSuccess(String response) {// 成功的回調 : 能夠操作返回的資料}@Overridepublic void reqError(String error) {// 失敗的回調 :失敗的提醒}};
最後通過 VolleyHttpRequest 調用須要請求相應的資料類型 :
VolleyHttpRequest.String_request(url, volleyRequest);
5.4 圖片請求 :ImageLoader
注意:請求大量圖片建議使用 ImageLoader ,請求單張圖片 使用ImageLoader和ImageRequest均可;
使用ImageLoader 的 話 ,須要使用 ImageListener 和 不須要使用 VolleyHandler 回調。
先看看 ImageListener :
//第一個參數是 ImageView ,第二個 參數是 預設圖片 , 第三個 參數 是 載入失敗的 圖片 ImageListener imageListener=ImageLoader.getImageListener(ImageView, defaultImageResId, errorImageResId)
比如:兩句代碼就能夠實現 圖片的載入和圖片緩衝(已經封裝) :
ImageListener imageListener = ImageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher); 網路請求 : VolleyHttpRequest.Image_Loader(url, imageListener);
6.最佳化範例
最佳化下篇的電源列表的列子:
6.1 最佳化圖片載入
在Adapter 裡載入圖片的時候,僅僅須要兩句代碼就實現了 UI層 請求圖片。
//實現ImageListenerImageListener imageListener = ImageLoader.getImageListener(imageView,R.drawable.ic_launcher, R.drawable.ic_launcher); //請求 圖片 設定圖片VolleyHttpRequest.Image_Loader(url, imageListener);
6.2 最佳化請求資料
使用的是JsonObject_Request ;比如
String url=VolleyHttpPath.getSharedAll();VolleyHandler<JSONObject> volleyRequest=new VolleyHandler<JSONObject>() {@Overridepublic void reqSuccess(JSONObject response) {// 成功後的解析List<shared> list=new ArrayList<shared>();String str="網路錯誤";try {if(response.getString("msg").equals("success")&&response.getInt("code")==1){//json解析 為 List<shared> JSONArray array=new JSONArray(response.getString("data"));for(int i=0;i<array.length();i++){JSONObject object=(JSONObject) array.get(i);shared s=new shared();s.setId(object.getInt("id"));s.setName(object.getString("name"));s.setPic(object.getString("pic"));s.setTotol(object.getString("totol"));list.add(s);}if(list.size()>0){//解析完成 。適配 listviewMovieListAdapter adapter=new MovieListAdapter(list);move_list.setAdapter(adapter);}else{str="沒有解析出來"+response.toString();Show(str);}}else{Show(response.getString("msg"));}} catch (JSONException e) {// 發生異常Show(e.getMessage());}}@Overridepublic void reqError(String error) {// 失敗Show("JsonObject error:"+error);}};//網路請求 VolleyHttpRequest.JsonObject_Request(url, volleyRequest);
6.3 demo下載
執行個體——電影列表最佳化版下載
7.總結
使用Volley網路通訊架構 ,主要是使用其來 載入資料 ,載入圖片機制,圖片緩衝機制,和Activity 聯動機制的實現;不有用與圖片的上傳 ;以下將學習使用AsyncHttpClient 實現 圖片的上傳 ,當然也是一個開源架構,敬請關注;謝謝;
Android-Volley網路通訊架構(二次封裝資料請求和圖片請求(包含處理請求隊列和圖片緩衝))