Volley傳送簡單的網路請求(Sending a Simple Request)
編寫:kesenhoo - 原文:http://developer.android.com/training/volley/simple.html
使用Volley的方式是,你通過建立一個RequestQueue
並傳遞Request
物件給它。RequestQueue管理用來執行網路操作的工作執行緒,從Cache中讀寫資料,並解析Http的響應內容。Requests
執行raw responses的解析,Volley會把響應的資料分發給主執行緒。
這節課會介紹如何使用Volley.newRequestQueue
這個建立請求佇列RequestQueue的方法來傳送一個請求,在下一節課建立一個請求佇列Setting Up a RequestQueue中會介紹你自己如何建立一個請求佇列。
這節課也會介紹如何新增一個請求到RequesutQueue以及如何取消一個請求。
1)Add the INTERNET Permission
為了使用Volley,你必須新增android.permission.INTERNET
許可權到你的manifest檔案中。沒有這個許可權,你的app將無法訪問網路。
2)Use 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() {
@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控制元件,這樣你可以在響應的handler中輕鬆的修改UI,但是對於庫提供的一些其他方法是有些特殊的,例如與取消有關的。
關於如何建立你自己的請求佇列,而不是使用Volley.newRequestQueue方法,請檢視建立一個請求佇列Setting Up a RequestQueue。
3)Send a Request
為了傳送一個請求,你只需要構造一個請求並通過add()
方法新增到RequestQueue
中。一旦你新增了這個請求,它會通過佇列,得到處理,然後得到原始的響應資料並返回。
當你執行add()
方法時,Volley觸發執行一個快取處理執行緒以及一系列網路處理執行緒。當你新增一個請求到佇列中,它將被快取執行緒所捕獲並觸發:如果這個請求可以被快取處理,那麼會在快取執行緒中執行響應資料的解析並返回到主執行緒。如果請求不能被快取所處理,它會被放到網路佇列中。網路執行緒池中的第一個可用的網路執行緒會從佇列中獲取到這個請求並執行HTTP操作,解析工作執行緒的響應資料,把資料寫到快取中並把解析之後的資料返回到主執行緒。
請注意那些比較耗時的操作,例如I/O與解析parsing/decoding都是執行在工作執行緒。你可以在任何執行緒中新增一個請求,但是響應結果都是返回到主執行緒的。
下圖1,演示了一個請求的生命週期:
4)Cancel a Request
對請求Request物件呼叫cancel()
方法取消一個請求。一旦取消,Volley會確保你的響應Handler不會被執行。這意味著在實際操作中你可以在activity的onStop()
方法中取消所有pending在佇列中的請求。你不需要通過檢測getActivity() == null
來丟棄你的響應handler,其他類似onSaveInstanceState()
等保護性的方法裡面也都不需要檢測。
為了利用這種優勢,你應該跟蹤所有已經傳送的請求,以便在需要的時候可以取消他們。有一個簡便的方法:你可以為每一個請求物件都繫結一個tag物件。然後你可以使用這個tag來提供取消的範圍。例如,你可以為你的所有請求都繫結到執行的Activity上,然後你可以在onStop()
方法執行requestQueue.cancelAll(this)
。同樣的,你可以為ViewPager中的所有請求縮圖Request物件分別打上對應Tab的tag。並在滑動時取消這些請求,用來確保新生成的tab不會被前面tab的請求任務所卡到。
下面一個使用String來打Tag的例子:
- 定義你的tag並新增到你的請求任務中。
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);
- 在activity的onStop()方法裡面,取消所有的包含這個tag的請求任務。
@Override
protected void onStop () {
super.onStop();
if (mRequestQueue != null) {
mRequestQueue.cancelAll(TAG);
}
}
當取消請求時請注意:如果你依賴你的響應handler來標記狀態或者觸發另外一個程式,你需要對此進行考慮。再說一次,response handler是不會被執行的。
轉自:http://hukai.me/android-training-course-in-chinese/connectivity/volley/simple.html
相關文章
- volley建立標準的網路請求(Making a Standard Request)
- nodejs使用request傳送http請求NodeJSHTTP
- Volley實現自定義的網路請求Implementing a Custom Request
- Android網路請求(4) 網路請求框架VolleyAndroid框架
- Windows Phone 8.1 傳送http 網路請求。WindowsHTTP
- 使用 request 和 cheerio 庫來傳送 HTTP 請求HTTP
- Volley 原始碼解析之網路請求原始碼
- 封裝Volley使Volley的每個請求都自動儲存和傳送Cookie封裝Cookie
- okhttp網路請求框架的簡單使用HTTP框架
- Android Volley 非同步網路請求分析Android非同步
- axios傳送post請求,request.getParamter接收不到iOS
- 如何在 Go 中傳送表單請求Go
- 簡單6步搞定Flutter網路請求Flutter
- Postman傳送Post請求Postman
- Java傳送Post請求Java
- 傳送GET請求 示例
- HttpClient--傳送請求HTTPclient
- perl傳送http請求HTTP
- java傳送http請求JavaHTTP
- Flutter 網路請求的三種簡單實現Flutter
- Volley 網路請求框架介紹與使用說明框架
- Postman傳送請求引數是Map格式的請求Postman
- okhttp 原始碼解析 - 網路協議的實現 - 請求流程: 請求的傳送與響應的接收HTTP原始碼協議
- angularjs中$http模組傳送post請求request payload轉form dataAngularJSHTTPORM
- vue2專案中使用webworker(一):傳送網路請求VueWeb
- 如何傳送請求以及AJAX
- C# 傳送POST請求C#
- 使用HttpClient傳送GET請求HTTPclient
- 使用httpclient傳送http請求HTTPclient
- SpringMVC中如何傳送GET請求、POST請求、PUT請求、DELETE請求。SpringMVCdelete
- Android Volley 原始碼解析(一),網路請求的執行流程Android原始碼
- Zttp 傳送 form params 請求 而非 JSON 請求ORMJSON
- 微信小程式之網路請求簡單封裝微信小程式封裝
- Kotlin中Retrofit網路請求簡單封裝Kotlin封裝
- Vue 使用 Axios 傳送請求的請求體問題VueiOS
- 以Raw的方式傳送POST請求
- java傳送http的get、post請求JavaHTTP
- 使用Postman傳送POST請求的指南Postman