天天看點

Volley的簡單使用

Volley簡介

Volley是2013年Google I/O大會上推出的一個新的網絡通信架構,非常适合資料量不大,但通信頻繁的網絡操作,而對于大資料量的網絡操作,Volley就不太合适了。

簡單使用

不管是StringRequest、JsonRequest還是ImageRequest,都是以下三步曲:

  1. 建立一個RequestQueue對象
  2. 建立一個Request對象(StringRequest、JsonObjectRequest、ImageRequest)
  3. 将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個參數,分别是:

  1. 圖檔的URL位址
  2. 圖檔請求成功的回調
  3. 圖檔的寬度
  4. 圖檔的高度
  5. 圖檔的顔色屬性
  6. 圖檔請求失敗的回調

圖檔的顔色屬性:

Bitmap.Config下的幾個常量都可以使用,其中ARGB_8888可以展示最好的顔色屬性,每個圖檔像素占據4個位元組的大小,而RGB_565則表示每個圖檔像素占據2個位元組大小。

圖檔的寬度或高度:

如果指定的網絡圖檔的寬度或高度大于指定的最大值,則會對圖檔進行壓縮,指定成0的話就表示不管圖檔有多大,都不會進行壓縮。

繼續閱讀