NoHttp提供了以下幾種方法來取消請求:
[TOC]
## 取消單個請求
直接調用`Request`的`cancel()`方法即可:
```java
/**
* 請求對象。
*/
private Request<String> mRequest;
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_cacel_demo);
// 發起請求。
mRequest = NoHttp.createStringRequest(Constants.URL_NOHTTP_TEST, RequestMethod.GET);
...
}
@Override
protected void onDestroy() {
super.onDestroy();
// 退出時取消請求。
if (mRequest != null)
mRequest.cancel();
}
```
## 取消隊列中的指定請求
一般用于一個頁面有多個請求,在退出之前如果請求還沒執行完時取消時。需要給這個`Request`設置一個`sign`,在取消的時候調用隊列的`queue.cancenBySign(Object)`即可。
```java
private RequestQueue queue;
private Object cancelSign = new Object();
@Override
protected void onActivityCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_cacel_demo);
// 初始化隊列等。
...
// 請求1。
Request<String> request1 = NoHttp.createStringRequest(Constants.URL_NOHTTP_TEST, RequestMethod.GET);
request1.setCancelSign(cancelSign);
// 請求2。
Request<String> request2 = NoHttp.createStringRequest(Constants.URL_NOHTTP_TEST, RequestMethod.GET);
request2.setCancelSign(cancelSign);
// 把請求加入隊列
queue.add(1, request1, listener);
queue.add(2, request2, listener);
}
private OnResponseListener listener = new OnResponseListener() {
...
}
@Override
protected void onDestroy() {
super.onDestroy();
queue.cancelBySign(cancelSign);
}
```
## 取消隊列中的所有請求
一般用于APP退出時取消未完成的所有請求,或者某個頁面退出時取消所有請求。
```java
@Override
protected void onDestroy() {
super.onDestroy();
queue.cancelAll();
}
```
**推薦閱讀**
[1. NoHttp隊列特性詳解](http://doc.nohttp.net/222881)
[1. 請求的優先級](http://doc.nohttp.net/222885)