天天看點

Volley使用(一)

 相信大家很多做安卓開發的都知道Volley這個架構  本人做了差不多7個項目 有四個用的這個架構   對它還是比較鐘愛的  好下面就來詳細介紹一下  整個Volley架構  我分為三部分去講解  今天想進行一些基礎的講解 

1.什麼是Volley

   Volley是Google I/O 2013上推出的 是android上的網絡通訊庫

下面看一張谷歌官方的圖檔

Volley使用(一)

這張圖很直覺的看出

Volley特别适合用于網絡互動頻繁  但是資料量不大的情況 如果你要下載下傳一些大檔案 使用Volley架構是比較糟糕的選擇 Volley不适合大資料量的互動

Volley把AsyncHttpClient和Universal-Image-Loader的優點集于了一身,既可以像AsyncHttpClient一樣非常簡單地進行HTTP通信,也可以像Universal-Image-Loader一樣輕松加載網絡上的圖檔

2.Volley有哪些功能

   a.資料異步請求;

   b.網絡請求的排序

   c.網絡請求的優先級處理

   d.緩存(volley内部會建立一個緩存線程)

   e.多級别取消請求

   f.和Activity和生命周期的關聯(Activity結束時同時取消所有網絡請求)

3.volley      jar包

   我們可以百度上面搜出一大堆jar包 這個我不說了  

4.Volley的用法(StringRequest)

   最基本的HTTP通信,即發起一條HTTP請求,

首先我們需要得到一個RequestQueue

RequestQueue MyRequestQueue = Volley.newRequestQueue(context);  

這個MyRequestQueue 是一個請求隊列對象  内部的設計非常适合高并發的  是以我們隻需要建立一個RequestQueue就可以了 我們可以将這行代碼放到Application裡面去初始化(這裡我們隻是說一下用法 是以我就直接放到Activity中了)

接下來我們看一下

  1. StringRequest stringRequest = new StringRequest("http://www.baidu.com",  
  2.                         new Response.Listener<String>() {  
  3.                             @Override  
  4.                             public void onResponse(String response) {  
  5.                                 Log.d("TAG", response);  
  6.                             }  
  7.                         }, new Response.ErrorListener() {  
  8.                             @Override  
  9.                             public void onErrorResponse(VolleyError error) {  
  10.                                 Log.e("TAG", error.getMessage(), error);  
  11.                             }  
  12.                         });  

這段代碼中兩個回調方法 大家一應該都明白這裡面的意思 這裡需要三個參數 第一個URl不多說 第二個請求成功的回調方法 第三個 請求失敗的回調方法

最後我們需要把這個StringRequest  add到我們剛才建立的請求隊列中

MyRequestQueue.add(stringRequest)

注:StringRequest隻是Request的一種還有很多(ImageRequest,jsonRequest等等 還可以使用自定義的Request這個後面我們詳細講解一下)

上面就是一個簡單的Volley的get請求  有人問了 那post請求呢

好接着看

StringRequest提供了一個有四個參數的方法

StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener); 

我們看第一個參數  大家肯定明白了 對  就是我們選擇get  post的地方 

我們隻是這裡可以設定請求方法 但是并沒有我們可以送出參數的地方 那怎麼辦呢   我當時也納悶 最後看了大神的部落格才知道(引用大神的一段話)

       StringRequest中并沒有提供設定POST參數的方法,但是當發出POST請求的時候,Volley會嘗試調用StringRequest的父類——Request中的getParams()方法來擷取POST參數,那麼解決方法自然也就有了,我們隻需要在StringRequest的匿名類中重寫getParams()方法,在這裡設定POST參數就可以了

  1. StringRequest stringRequest = new StringRequest(Method.POST, url,  listener, errorListener) {  
  2.     @Override  
  3.     protected Map<String, String> getParams() throws AuthFailureError {  
  4.         Map<String, String> map = new HashMap<String, String>();  
  5.         map.put("params1", "value1");  
  6.         map.put("params2", "value2");  
  7.         return map;  
  8.     }  
  9. };  

這個Request我們提了一句   我們還可以使用自己定制的Request這個後面講

  總結

 Volley請求其實非常簡單

1.建立RequestQueue

2.建立StringRequest

3.将StringRequest添加到請求隊列中

我們重點強調的是2 StringRequest  還有ImageRequest  JsonRequest等 其他的請求步驟跟這個一樣 大家要學會舉一反三 

有哪些寫的不對的地方請大家及時反映