关于取消OkHttp请求的问题

一.简介

有时候网络条件不好的情况下,用户会主动关闭页面,这时候需要取消正在请求的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{
                  //其他情况下
            }
     ....

你可能感兴趣的:(关于取消OkHttp请求的问题)