2、volley 官方教程-發送一個簡單的請求

文章摘要
1、通過Volley 發送簡單請求的案例
2、取消Volley請求


英文文獻

可以通過創建一個RequestQueue并傳遞Request對象來使用Volley。RequestQueue管理用于運行網絡操作,讀取和寫入緩存以及解析響應的工作線程。 請求對原始響應進行解析,并且Volley負責將已解析的響應分派回主線程進行傳遞。

本文通過Volley 發送一個簡單的請求,步驟如下:

一、添加Internet權限

使用Volley,你必須添加 android.permission.INTERNET權限您的應用程序的清單。沒有這一點,你的應用程序將無法連接到網絡。

<uses-permission android:name="android.permission.INTERNET" />

二、使用newRequestQueue

Volley 提供了一個方便的方法Volley.newRequestQueue,設置了一個 RequestQueue對你來說,使用默認值,并啟動隊列。例如:

final TextView mTextView = (TextView) findViewById(R.id.text);
...

// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.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);

Volley總是提供在主線程解析的響應。運行在主線程上是方便用于填充UI控件與接收到的數據,你可以隨意修改UI直接從您的響應處理控制,但它是許多由庫,特別是有關取消請求提供了重要的語義尤為關鍵。

附:運行效果

三、發送請求

要發送請求,只需構造一個請求,并使用add()將其添加到RequestQueue中,如上所示。一旦你添加了請求,它將通過管道移動,得到服務,并且它的原始響應被解析和傳遞。

  • 1、當你調用add()時,Volley運行一個緩存處理線程和一個網絡調度線程池。
  • 2、當您向隊列添加請求時,它由緩存線程獲取并分類:如果請求可以從緩存服務,緩存響應將在緩存線程上解析,并且解析的響應將在主線程上傳遞。
  • 3、如果請求無法從緩存服務,則將其放置在網絡隊列上。第一個可用的網絡線程接收來自隊列的請求,執行HTTP事務,解析工作線程上的響應,將響應寫入緩存,并將解析的響應發回主線程進行傳遞。

請注意,諸如阻塞I / O和解析/解碼等昂貴的操作在工作線程上完成。您可以從任何線程添加請求,但響應始終在主線程上傳遞。

  • 圖1示出了請求的聲明周期

四、取消請求

要取消請求,請在Request對象上調用cancel()。一旦取消,Volley保證您的Response Handler程序將永遠不會被調用,請求會從中釋放。這在實踐中意味著您可以在Activity的onStop()方法中取消所有待處理的請求,并且在來處理響應處理程序時不必對getActivity()== null進行檢查,是否調用了onSaveInstanceState()、是否已調用其他釋放資源等生命周期方法。

要利用此行為,您通常必須跟蹤所有正在運行的請求,以便能夠在適當的時間取消它們。有一個更簡單的方法:您可以將標記對象與每個請求相關聯。然后,您可以使用此標記來提供要取消的請求范圍。例如,您可以使用他們代表的活動來標記所有請求,并從onStop()調用requestQueue.cancelAll(this)。同樣,您可以使用其各自的選項卡在ViewPager選項卡中標記所有縮略圖請求,并在滑動上取消以確保新標簽未被來自另一個的請求所阻止。

這是一個使用標記的字符串值的示例:

  • 1、定義你的標簽,并把它添加到您的要求。
public static final String TAG = "MyTag";
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);
  • 2、在您的活動的onStop()方法,取消有這個標記的所有請求。
protected void onStop () {
    super.onStop();
    if (mRequestQueue != null) {
        mRequestQueue.cancelAll(TAG);
    }
}

注意:只是取消了請求Request,并不會取消Request Handler。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容