取消请求

NoHttp提供了以下几种方法来取消请求:

取消单个请求

直接调用Requestcancel()方法即可:

/**
  * 请求对象。
  */
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)即可。

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退出时取消未完成的所有请求,或者某个页面退出时取消所有请求。

@Override
protected void onDestroy() {
    super.onDestroy();
    
    queue.cancelAll();
}

推荐阅读
1. NoHttp队列特性详解
1. 请求的优先级

文章导航