Android網絡通信必備神器Volley詳解——初識Volley

簡介

Volley是Google開發和維護的一個網絡通信開源庫,具有方便、併發、快速的特點。但是Volley並不適合大文件下載或者流操作,因爲在解析數據的時候Volley是把所有的response都放在內存裏的。對於大文件下載可以用DownloadManager

下載Volley

使用git下載
git clone https://android.googlesource.com/platform/frameworks/volley

發送一個簡單的Request

RequestQueue

RequestQueue是用來管理網絡通信中的線程,讀寫緩存,解析response的。Volley提供了一個方法Volley.newRequestQueue來設置RequestQueue。
下面用一個例子來講解一下
volleyResquestBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //Instantiate the RequestQueue
                RequestQueue queue = Volley.newRequestQueue(getApplication());
                String url = "http://www.baidu.com";

                StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        Toast.makeText(getApplicationContext(), "Response is:" + s.substring(0, 50),Toast.LENGTH_LONG).show();
                    }
                }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        Toast.makeText(getApplicationContext(),"That didn't work!",Toast.LENGTH_LONG).show();
                    }
                });

                // Add the request to RequestQueue.
                queue.add(stringRequest);
            }
        });

向百度的主頁發送一個GET請求並把前50個字符顯示出來。

實現流程

1. 使用Volley.newRequestQueue(this)初始化RequeQueu
2. new一個StringRequest,並且重寫onResponse和ErrorListener方法
3. queue.add(stringRequest)把stringRequest加入隊列

Volley 的返回數據Response都是返回在主線程的,所以可以根據返回的數據直接控制UI 

Request生命週期


取消Request

如果在Activity中啓動了網絡請求,但是在請求還沒結束的時候Activity就結束了,除了浪費資源意外還有可能造成crash。所以在Activity結束的時候就要取消所有的Request。可以使用Tag的方法在onStop()中取消Request。

public static final String TAG = "Spark"
StringRequest stringRequest; // Assume this exists.
RequestQueue mRequestQueue;  // Assume this exists.

// Set the tag on the request.
stringRequest.setTag(TAG);

// Add the request to the RequestQueue.
mRequestQueue.add(stringRequest);

在Activity的onStop()方法中
@Override
protected void onStop () {
    super.onStop();
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(TAG);
    }
}




發佈了58 篇原創文章 · 獲贊 26 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章