[置顶] NoHttp详解之NoHttp如何取消请求

NoHttp如何取消请求

QQ技术交流1群:46523908
QQ技术交流2群:46505645
NoHttp 源码及Demo: https://github.com/Y0LANDA/NoHttp

NoHttp是专门做Android网络请求与下载的框架。

取消某一个请求

取消某个请求可以直接调用请求对象的cancel方法,例如:

Request<String> request = NoHttp.createStringRequest(url, RequestMethod);
...
//取消request
request.cancel();

这里需要注意的是,如果请求还没开始,调用cancel方法后,OnResponseListener的所有回调方法都不会被调用。如果请求已经开始,但是还没有响应,调用cancel方法后,OnResponseListener的onSucceed和onFailed都不会被调用,但是onFinish方法会被调用。 因为onStart方法已经被调用,所以要onFinish。

取消某几个指定的请求

为允许取消的请求设置一个cancelSign,这些请求全部加入requestQueue后,调用requestQueue.cancelBySign方法,传入刚才设置的cancelSign,即可取消用这个cancelSign标注的所有请求。伪代码如下:

// new一个队列
RequestQueue requestQueue = NoHttp.newRequestQueue();
requestQueue.start();
...

Object cancelSign = new Object();// 随便弄一个object就可以

// 请求1
Request<String> request1 = NoHttp.createStringRequest(url1, RequestMethod);
request1.setCancelSign(cancelSign);

// 请求2
Request<String> request2 = NoHttp.createStringRequest(url2, RequestMethod);
request2.setCancelSign(cancelSign);

// 请求3
Request<String> request3 = NoHttp.createStringRequest(url3, RequestMethod);
request3.setCancelSign(cancelSign);

// 加入到请求队列
requestQueue.add(1, request1, OnResponseListener);
requestQueue.add(2, request2, OnResponseListener);
requestQueue.add(3, request3, OnResponseListener);

...
// 取消三个用cancelSign标注的请求
requestQueue.cancelBySign(cancelSign);

取消队列中的所有请求

这个是最简单的, 只需要一句话:

// new一个队列
RequestQueue requestQueue = NoHttp.newRequestQueue();
requestQueue.start();
...// 假设这里加入了很多请求到队列

// 取消队列中的所有请求
requestQueue.cancelAll();

是不是很潇洒, 哈哈.
不过这里需要注意一下,取消了所有请求只是取消队列中现有的所有请求,但是如果在取消后,再往队列添加请求,请求还是会执行,因为那是新的请求。如果想取消了之后再添加请求不能被执行请往下看。

停止队列

停止队列跟上面一样,很简单,但是停止队列后,再此添加请求到队列中,请求就不能被执行,因为队列被停止

// new一个队列
RequestQueue requestQueue = NoHttp.newRequestQueue();
...// 假设这里加入了很多请求到队列

// 停止队列
requestQueue.stop();

...
// 下面的请求是不会被执行的
Request<String> request = NoHttp.createStringRequest(url, RequestMethod);
requestQueue.add(0, reqeust, OnResponseListener);

还有不清楚的同学在下面留言喔,好了,收工。

NoHttp 源码及Demo https://github.com/Y0LANDA/NoHttp

你可能感兴趣的:(android,框架,okhttp,NoHttp,停止请求)