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)