Android Volley

1.volley簡單的介紹:java

Volley是一個HTTP庫,使Android應用程序變得更加容易,最重要的是,網絡 得更快。android

 

Vollry 提供如下好處:算法

1.自動調度的網絡請求。json

2.多個併發的網絡鏈接。數組

3.透明的磁盤和內存緩存使用標準的HTTP響應緩存一致性緩存

4.支持請求優先級。服務器

5.取消請求API。 你能夠取消一個單一的請求,或者你能夠設定或塊 取消的請求範圍。網絡

6.例如,易於定製重試和補償。併發

7.強烈的要求,便於正確填充界面與數據獲取 異步的網絡。app

 

Volley很是適合去進行數據量不大,但通訊頻繁的網絡操做,而對於大數據量的網絡操做,好比說下載文件等,Volley的表現就會很是糟糕。

 

2.下載Volley

下載路徑:https://android.googlesource.com/platform/frameworks/volley

 

3.如何使用volley:

Volley提供了一個方便的方法Volley.newRequestQueue設置一個RequestQueue,使用默認值,並啓動隊列。

  Vollay已經爲咱們實現了 StringRequest、JsonArrayRequest、JsonObjectRequest、ImageRequest請求

  Volley的用法很是簡單,即發起一條HTTP請求,而後接收HTTP響應。首先須要獲取到一個RequestQueue對象,調用以下方法獲取到:

RequestQueue queue = Volley.newRequestQueue(this);  

 

RequestQueue是一個請求隊列對象,它能夠緩存全部的HTTP請求,按照必定的算法併發地發出這些請求。

 

RequestQueue內部的設計就是很是合適高併發的,所以沒必要爲每一次HTTP請求都建立一個RequestQueue對象,這是很是浪費資源的,基本上在每個須要和網絡交互的Activity中建立一個RequestQueue對象就足夠了。

 

String url ="http://www.baidu.com";  
  
// Request a string response from the provided URL.  
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,  
            new Response.Listener<String>() {  
    @Override  
    public void onResponse(String response) {  
        // Display the first 500 characters of the response string.  
        mTextView.setText("Response is: "+ response.substring(0,500));  
    }  
}, new Response.ErrorListener() {  
    @Override  
    public void onErrorResponse(VolleyError error) {  
        mTextView.setText("That didn't work!");  
    }  
});  
// Add the request to the RequestQueue.  
queue.add(stringRequest);

  

StringRequest的構造函數須要傳入4個參數,第一個參數是請求的方式(POST,GET,DELETE,PUT),第二個參數是目標服務器的URL地址,第三個參數是服務器響應成功的回調,第四個參數是服務器響應失敗的回調

最後,Volley是要訪問網絡的,不要忘記在你的AndroidManifest.xml中添加以下權限:

<uses-permission android:name="android.permission.INTERNET" />

  

如何添加請求參數與頭部信息呢?

在StringRequest的匿名類中重寫getParams()方法,getHeaders()方法

 

StringRequest stringRequest = new StringRequest(Request.Method.GET, "http://www.baidu.com",new Response.Listener<String>(){  
  
  
@Override  
public void onResponse(String response) {  
// TODO Auto-generated method stub  
  
}  
  
} ,new Response.ErrorListener() {  
  
  
@Override  
public void onErrorResponse(VolleyError error) {  
// TODO Auto-generated method stub  
  
}  
}){  
@Override  
protected Map<String, String> getParams() throws AuthFailureError {  
// TODO 添加請求參數  
return super.getParams();  
}  
  
@Override  
public Map<String, String> getHeaders() throws AuthFailureError {  
//TODO添加頭部   
//注意  Content-Type= application/x-www-form-urlencoded 默認已添加  
return super.getHeaders();  
}  
};  

  

是否是很簡單呢,使用StringRequest就4步:

 

 

volley 的使用遵循如下四步: 
一、獲取請求隊裏RequestQueue 

RequestQueue queue = Volley.newRequestQueue(this);

二、啓動請求隊列 

queue.start()

  以上這兩步一般也歸爲一步 
三、獲取請求Request 

StringRequest stringRequest = new StringRequest(...)

四、把請求添加到請求隊列中 

queue.add(stringRequest );

  

一樣道理

 

相似於StringRequest,JsonRequest也是繼承自Request類的,不過因爲JsonRequest是一個抽象類,所以咱們沒法直接建立它的實例,那麼只能從它的子類入手了。

JsonRequest有兩個直接的子類,JsonObjectRequest和JsonArrayRequest,從名字上你應該能就看出它們的區別了吧?

一個是用於請求一段JSON數據的,一個是用於請求一段JSON數組的。

至於它們的用法也基本上沒有什麼特殊之處,先new出一個JsonObjectRequest對象,以下所示:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("http://www.baidu.com", null,    
        new Response.Listener<JSONObject>() {    
            @Override    
            public void onResponse(JSONObject response) {    
                Log.d("TAG", response.toString());    
            }    
        }, new Response.ErrorListener() {    
            @Override    
            public void onErrorResponse(VolleyError error) {    
                Log.e("TAG", error.getMessage(), error);    
            }    
        });

  

由此能夠看出,服務器返回給咱們的數據確實是JSON格式的,而且onResponse()方法中攜帶的參數也正是一個JSONObject對象,以後只須要從JSONObject對象取出咱們想要獲得的那部分數據就能夠了。

JsonObjectRequest的用法和StringRequest的用法基本上是徹底同樣的,Volley的易用之處也在這裏體現出來了,會了一種就可讓你觸類旁通,所以關於JsonArrayRequest的用法,也是同樣的。

 

Volley的基本用法就講到這裏、

相關文章
相關標籤/搜索