Volley簡介
Volley是2013年Google I/O大會上推出的一個新的網絡通信架構,非常适合資料量不大,但通信頻繁的網絡操作,而對于大資料量的網絡操作,Volley就不太合适了。
簡單使用
不管是StringRequest、JsonRequest還是ImageRequest,都是以下三步曲:
- 建立一個RequestQueue對象
- 建立一個Request對象(StringRequest、JsonObjectRequest、ImageRequest)
- 将Request對象添加到RequestQueue裡面。
StringRequest的使用
String url = "http://www.baidu.com";
// 第一步
RequestQueue requestQueue = Volley.newRequestQueue(this);
// 第二步
StringRequest stringRequest = new StringRequest(url, new Response.Listener<String>() {
@Override
public void onResponse(String str) {
// 通路成功的監聽,str是傳回的資料
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 通路失敗的監聽
}
});
// 第三步
requestQueue.add(stringRequest);
JsonRequest的使用
JsonRequest有兩種方式,一種是GET方式,不需要向伺服器傳回資料,一種是POST方式,需要向伺服器傳回資料。
GET方式
RequestQueue requestQueue = Volley.newRequestQueue(this);
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.GET,url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 通路成功的監聽,jsonObject是傳回的資料
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 通路失敗的監聽
}
});
requestQueue.add(jor);
POST方式
RequestQueue requestQueue = Volley.newRequestQueue(this);
// 準備要傳回的JSON對象
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("user", "hello");
jsonObject.put("pwd", "123456");
} catch (JSONException e) {
e.printStackTrace();
}
JsonObjectRequest jor = new JsonObjectRequest(Request.Method.POST,url, jsonObject, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject jsonObject) {
// 通路成功的監聽,jsonObject是傳回的資料
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 通路失敗的監聽
}
});
requestQueue.add(jor);
url是通路的網址
其實還有一個預設的規則,第一個參數可以不指定,如果你傳回JSON對象,預設就是POST方式,如果傳回的是null,預設就是GET方式。
ImageRequest的使用
RequestQueue requestQueue = Volley.newRequestQueue(this);
ImageRequest imageRequest = new ImageRequest(url, new Response.Listener<Bitmap>() {
@Override
public void onResponse(Bitmap bitmap) {
// 通路成功的監聽,bitmap是傳回的圖檔
}
}, 0, 0, Bitmap.Config.RGB_565, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError volleyError) {
// 通路失敗的監聽
}
});
requestQueue.add(imageRequest);
ImageRequest的構造函數接收6個參數,分别是:
- 圖檔的URL位址
- 圖檔請求成功的回調
- 圖檔的寬度
- 圖檔的高度
- 圖檔的顔色屬性
- 圖檔請求失敗的回調
圖檔的顔色屬性:
Bitmap.Config下的幾個常量都可以使用,其中ARGB_8888可以展示最好的顔色屬性,每個圖檔像素占據4個位元組的大小,而RGB_565則表示每個圖檔像素占據2個位元組大小。
圖檔的寬度或高度:
如果指定的網絡圖檔的寬度或高度大于指定的最大值,則會對圖檔進行壓縮,指定成0的話就表示不管圖檔有多大,都不會進行壓縮。