安卓中自定義並使用Volley框架請求網路

来源:http://www.cnblogs.com/zhangdiIT/archive/2016/09/07/5851450.html
-Advertisement-
Play Games

大家好,今天我們講一下如何使用Volley框架請求網路,為何要使用Volley框架,這就要先說一下使用Volley框架請求網路的優點了,volley是易於定製的,即你可以根據需求來設定volley框架,還有volley框架支持請求的優先順序設定,即你可以自主設定網路請求的優先順序,還有就是volley框 ...


  大家好,今天我們講一下如何使用Volley框架請求網路,為何要使用Volley框架,這就要先說一下使用Volley框架請求網路的優點了,volley是易於定製的,即你可以根據需求來設定volley框架,還有volley框架支持請求的優先順序設定,即你可以自主設定網路請求的優先順序,還有就是volley框架請求支持取消單個或多個請求,這個一會設置請求的時候會特別說明,還有它可以自動調度網路請求,至於其他的如代碼的健壯性、支持多併發等等就不一一列舉了,說了那麼多下麵就介紹如何自定義並使用Volley框架:

  第一步:定義netrequest類繼承StringRequest類

  1、在這個類里首先要自定義三個全局變數,

 

 1 private Priority priority;
 2 private Map<String,String> headers ;
 3 private Map<String,String> params;
 4 
 5 /**
 6      * 初始化全局變數
 7 */
 8 private void init(){
 9 priority = Priority.NORMAL;
10 headers = new HashMap<>();
11 params = new HashMap<>();
12     }

 

  2、實現兩個有參構造,在這兩個構造方法中並不需要再多些什麼,只要初始化自定義的三個全局變數。

1 public NetRequest(int method, String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
2 super(method, url, listener, errorListener);
3         init();
4     }
5 
6 public NetRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener) {
7 super(url, listener, errorListener);
8         init();
9     }

  3、重寫設置優先順序的方法

1 //設置優先順序
2 @Override
3 public Priority getPriority() {
4 return priority;
5     }

  4、重寫為請求添加請求頭信息的方法

 1 //為請求添加頭信息的方法
 2 @Override
 3 public Map<String, String> getHeaders() throws AuthFailureError {
 4 return headers;
 5     }
 6 
 7 @Override
 8 public Map<String, String> getParams()throws AuthFailureError{
 9 return params;
10     }
11 
12 public NetRequest setPriority(Priority priority){
13 this.priority = priority;
14 return this;
15     }
16 
17 public NetRequest addRequestHeader(String key,String value){
18 this.headers.put(key,value);
19 return this;
20     }
21 
22 public NetRequest addParams(String key,String value){
23 this.params.put(key, value);
24 return this;
25     }

 

  5、自定義一個發送請求的方法,其中VolleyUtil類為一個工具類,是自己定義的下一步就是定義它

1 /**
2      * 發送請求
3 */
4 public void start(){
5             VolleyUtil.start(this);
6         }

  6、自定義一個靜態類Builder為網路請求傳參,這也被稱作構造者模式

 1 //構造者模式
 2 public static class Builder{
 3 
 4   private String url;
 5   private int method;
 6   private CallBack callBack;
 7 
 8   public Builder setCallBack(CallBack callBack){
 9     this.callBack  = callBack;
10     return this;
11       }
12   public Builder setUrl(String url){
13     this.url = url;
14     return this;
15       }
16   public Builder setMethod(int method){
17     this.method = method;
18     return this;
19       }
20  }

  7、自定義一個buileder方法請求網路返回NetRequest(這一步比較關鍵)

 1       /**
 2          * 創建一個NetRequest請求網路
 3          * @return  NetRequest
 4          */
 5     public NetRequest build(){
 6             NetRequest nr = new NetRequest(
 7                 method, 
 8                 url,
 9                 new Response.Listener<String>() {
10                     @Override
11                     public void onResponse(String response) {
12                         if (callBack!=null){
13                                 callBack.onSuccess(response);
14                             }
15                      }
16                 },
17                 new Response.ErrorListener() {
18                     @Override
19                     public void onErrorResponse(VolleyError error) {
20                         if (callBack!=null){
21                             callBack.onError(error);
22                             }
23                         }
24                  });
25         return nr;
26         }                    

  8、定義一個介面Callback包含兩個抽象方法來實現請求網路四個參數的後兩個(因為網路請求是一個一步的操作,所以請求的時候需要自定義一個類實現這個藉口並重寫介面中的這兩個方法)

1 import com.android.volley.VolleyError;
2 
3     /**
4      * Created by zhangdi on 2016/8/8.
5      */
6     public interface CallBack {
7         public void onSuccess(String respone);
8         public void onError(VolleyError error);
9     }    

  第二步:自定義一個工具類(就是第一步中start方法中的那個工具類,裡面的方法都設置成靜態的方便調用,這也是工廠模式的一種)

  1、首先要初始化請求隊列

 1 private static RequestQueue requestQueue;
 2     /**
 3      * 初始化請求隊列
 4      * @param mContext
 5      */
 6     public static void init(Context mContext){
 7         if (requestQueue==null){
 8             requestQueue = Volley.newRequestQueue(mContext);
 9         }
10     }

  2、設置get請求方法

 1    /**
 2      * get請求
 3      * @param url
 4      * @return
 5      */
 6     public static NetRequest.Builder get(String url){
 7         return new NetRequest.Builder()
 8                     .setMethod(Request.Method.GET)
 9                     .setUrl(url);
10     }

  3、設置post請求方法

1     /**
2      * post請求
3      * @return
4      */
5     public static NetRequest.Builder post(String url){
6         return new NetRequest.Builder()
7                 .setMethod(Request.Method.POST)
8                 .setUrl(url);
9     }

  4、定義開始運行start方法(即將請求添加到請求隊列)

1     /**
2      *將請求添加到請求隊列
3      */   
4     public  static void start(NetRequest nr){
5         requestQueue.add(nr);
6     }

  5、設置取消請求方法(利用方法重載來實現取消一個和取消一組)

1     //方法重載
2     public static void cancel(Object tag){
3         requestQueue.cancelAll(tag);
4     }
5 
6     public static void cancel(RequestQueue.RequestFilter filter){
7         requestQueue.cancelAll(filter);
8     }

這裡的cancel()方法第一個請求取消方法是把所有請求都取消,第二個請求取消方法是自定義選擇性的取消某個請求

  第三步:調用封裝好的靜態類實現請求網路

  <1>先講一下使用get請求網路

    1、定義一個內部類即網路回調,實現Callback介面並重寫其中的兩個方法,需要如何重寫我已經在代碼塊中說明瞭,大家仔細閱讀

 1     private  class NetCallBack1 implements CallBack {
 2         @Override
 3         public void onSuccess(String respone) {
 4            這裡是請求成功是執行的操作
 5            記住網路請求都是非同步的,所以載入數據更新界面的功能都必須在這裡實現
 6            不然會報空指針的錯誤
 7         }
 8 
 9        @Override
10        public void onError(VolleyError error) {
11             這裡是執行網路請求不成功後執行的操作
12        }
13 }    

    2、利用工廠模式進行請求網路

1 VolleyUtil.get(你請求的網路介面)
2                 .setCallBack(new NetCallBack())//這是上一步自定義的回調函數
3                 .build()
4                 .setPriority(Request.Priority.HIGH)
5                 .addRequestHeader("apikey","你自己的apiley")
6                 .start();

  <2>再講一下如何使用post請求

    我這裡就直接在在調用的時候就實現了callback介面,不再單獨實現了

 1 VolleyUtil.post("http://192.168.191.1:8080/Server/doReg.jsp")
 2                  .setCallBack(new CallBack() {
 3                     @Override
 4                     public void onSuccess(String respone) {
 5                           請求成功是執行的步驟
 6                     }
 7 
 8                    @Override
 9                     public void onError(VolleyError error) {
10                           請求不成功時執行的步驟
11                     }
12                 })
13                 .build()
14                 .addParams("name","張三")
15                 .addParams("pwd","12345678")
16                 .setTag("post")
17                 .start();

其中addParams方法是在第二步NetRequest中有專門的定義,代碼可以在第一步中尋找到

  至此使用volley框架請求網路的步驟就算完成了,看起來定義比較麻煩,但是這是一勞永逸的,你在工程中只需要定義一遍,就可以在工程中需要網路請求的地方直接可以調用,註意的是網路請求還需要設置請求許可權(如果大家不清楚如何設置可以去我寫的關於定位的那篇文章中找到),這個需要在清單文件中申明,還有是如果你想一勞永逸還需要給工具類VolleyUtil進行初始化,這段代碼可以放在全局類中即Application類中,代碼如下:

 1 /**
 2  * Created by zhangdi on 2016/8/23.
 3  */
 4 public class MyApplication extends Application {
 5 
 6     @Override
 7     public void onCreate() {
 8         super.onCreate();
 9         VolleyUtil.init(this);//初始化請求隊列
10     }
11 
12 }

  好了,到此自定義並使用Volley框架請求網路數據的步驟就算全部結束了,當然網路請求框架有很多種,Volley並不是最好的,但是它的優點也特別顯明,所以在對於輕量級的請求網路數據時,使用Volley框架還是弊大於利的,這裡筆者還是比較建議使用的。還是如果大家感覺這篇文章還不錯的話就麻煩給推薦一下,若是有哪些地方總結的不對或是知識點有錯誤的地方還是希望大家評論指正,謝謝。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先Position在字面講是位置的意思,在HTML中是定位的意思,它有四種屬性:分別是static是靜態的,也是預設的效果,沒有特別的設定,遵循基本的定位規定,不能通過z-index進行層次分級。 absolute(絕對定位) absolute(絕對定位)不光脫離了文本流,而且在文本流中也不會給這 ...
  • 本文簡單介紹下如何來使用 Bootstrap,通過引入 Bootstrap,來實現一個最基本的入門例子。 在前一篇博文【Bootstrap】1.初識Bootstrap 基礎之上,我們完全可以更加方便快捷的創建一個的簡單例子。 在Bootstrap的官方網站的下載頁面 http://getbootst ...
  • 作為Web前端開發框架,Bootstrap為大多數標準的UI設計常見提供了用戶友好、擴瀏覽器的解決方案。 1.下載Bootstrap 打開官方網址 http://getbootstrap.com/ 進行下載。 2.準備項目模板文件夾 接下來,我們為第一個項目創建一個文件夾以及一些基本的文件。謂詞我們 ...
  • 語法: 作用: 啟動調試器 備註: 1. 可以將debugger語句放在過程的任何地方以中止執行。2. 使用debugger語句類似於在代碼中設置斷點。 3. debugger語句中止執行,但它不關閉任何文件或清除任何變數。 【註】只有打開調試器,否則debugger語句不起作用 實例: ...
  • × 目錄 [1]CSSStyleSheet [2]CSSRule 前面的話 關於腳本化CSS,查詢樣式時,查詢的是計算樣式;設置單個樣式時,設置的是行間樣式;設置多個樣式時,設置的是CSS類名。腳本化樣式表當然也是一種腳本化CSS的技術,雖然不經常使用,但有時卻非常有用。下麵將詳細介紹腳本化樣式表的 ...
  • 一. json介紹 json是一種輕量級的數據交換格式,規則很簡單: 1. 併列的數據之間用逗號(,)分隔; 2. 映射用冒號(:)表示; 3. 併列數據的集合(數組)用方括弧([])表示; 4. 映射的集合(對象)用大括弧({})表示。 對上述規則解析,可以發現: 數組是用([])創建的,對象是用 ...
  • Widget引入 我們可以把Widget理解成放置在桌面上的小組件(掛件),有了Widget,我們可以很方便地直接在桌面上進行各種操作,例如播放音樂。 當我們長按桌面時,可以看到Widget選項,如下圖所示: 點擊上圖中箭頭處的widgets圖標,會出現如下界面:(都是widget) 長按上圖中的任 ...
  • 本文利用SurfaceView來實現視頻的播放 本文地址:http://www.cnblogs.com/wuyudong/p/5851156.html,轉載請註明源地址。 在main.xml佈局文件添加用於視頻畫面繪製的SurfaceView 控制項: 項目佈局設計: 大部分代碼和《Android 多 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...