文章摘要
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。