Android-Volley網路通訊架構(二次封裝資料請求和圖片請求(包含處理請求隊列和圖片緩衝))

來源:互聯網
上載者:User

標籤: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網路通訊架構(二次封裝資料請求和圖片請求(包含處理請求隊列和圖片緩衝))

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.