关于取消OkHttp请求的问题
2017-02-06 本文已影响7205人
Mqlittleluck
一.简介
有时候网络条件不好的情况下,用户会主动关闭页面,这时候需要取消正在请求的http request, OkHttp提供了cancel方法,但是实际在使用过程中发现,如果调用cancel()方法,会回调到CallBack里面的 onFailure方法中,
/**
* Called when the request could not be executed due to cancellation, a connectivity problem or
* timeout. Because networks can fail during an exchange, it is possible that the remote server
* accepted the request before the failure.
*/
void onFailure(Call call, IOException e);
可以看到注释,当取消一个请求,网络连接错误,或者超时都会回调到这个方法中来,但是我想对取消请求做一下单独处理,这个时候就需要区分不同的失败类型了
二.解决思路
测试发现不同的失败类型返回的IOException e 不一样,所以可以通过e.toString 中的关键字来区分不同的错误类型
自己主动取消的错误的 java.net.SocketException: Socket closed
超时的错误是 java.net.SocketTimeoutException
网络出错的错误是java.net.ConnectException: Failed to connect to xxxxx
三.代码
直贴了部分代码
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if(e.toString().contains("closed")) {
//如果是主动取消的情况下
}else{
//其他情况下
}
....