轉載劉望舒的博客Android網絡編程(三)Volley用法全解析
前言
Volley想必很多人都用過,為了建立網絡編程的知識體系,Volley是必須要講的知識點,所以我這里有必要再次介紹一下Volley的使用。
1.Volley簡介
在2013年Google I/O大會上推出了一個新的網絡通信框架Volley。Volley既可以訪問網絡取得數據,也可以加載圖片,并且在性能方面也進行了大幅度的調整,它的設計目標就是非常適合去進行數據量不大,但通信頻繁的網絡操作,而對于大數據量的網絡操作,比如說下載文件等,Volley的表現就會非常糟糕。在使用Volley前請下載Volley庫并放在libs目錄下并add到工程中。 下載Volley請點擊這
2.Volley網絡請求隊列
Volley請求網絡都是基于請求隊列的,開發者只要把請求放在請求隊列中就可以了,請求隊列會依次進行請求,一般情況下,一個應用程序如果網絡請求沒有特別頻繁則完全可以只有一個請求隊列(對應Application),如果非常多或其他情況,則可以是一個Activity對應一個網絡請求隊列,這就要看具體情況了,首先創建隊列:
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
3.StringRequest的用法
StringRequest返回的數據是String類型的,我們查看下StringRequest的源碼:
public class StringRequest extends Request<String> {
private final Listener<String> mListener;
public StringRequest(int method, String url, Listener<String> listener, ErrorListener errorListener) {
super(method, url, errorListener);
this.mListener = listener;
}
public StringRequest(String url, Listener<String> listener, ErrorListener errorListener) {
this(0, url, listener, errorListener);
}
...省略}
有兩個構造函數,其中第一個比第二個多了一個請求的方法,如果采用第二個則默認是GET請求。好了,我們試著用GET方法來請求百度:
//創建請求隊列
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
StringRequest mStringRequest = new StringRequest(Request.Method.GET, "http://www.baidu.com", new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.i("wangshu", response);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("wangshu", error.getMessage(), error);
}
});
//將請求添加在請求隊列中
mQueue.add(mStringRequest);
當然別忘了添加網絡訪問權限:
<uses-permission android:name="android.permission.INTERNET"/>
4.JsonRequest的用法
和StringRequest類似,我們直接上代碼:
RequestQueue mQueue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest mJsonObjectRequest = new JsonObjectRequest(Request.Method.POST,"http://api.1-blog.com/biz/bizserver/article/list.do", new Response.Listener<JSONObject>() {
@Override public void onResponse(JSONObject response) {
Log.d("wangshu", response.toString());
}
}, new Response.ErrorListener() {
@Override public void onErrorResponse(VolleyError error) {
Log.e("wangshu", error.getMessage(), error);
}
} );
mQueue.add(mJsonObjectRequest);