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的基本用法就講到這裏、