OKHttp取消网络请求

在快速切换界面的时候,容易丢失上下文,如果不取消请求的话有可能会导致请求的结果无法放到界面中,应为界面已经销毁了,容易报空指针,捕获不到,界面就挂了。背景知识,不同版本的cancle可能会略有不同,感觉别人写的特别麻烦,同时采取了,别人的建议当前界面销毁,直接销毁整个界面的请求,下面看下我的做法。

以fragment中使用举例。

1、

OkHttpUtils.post().url(Const.DATAURL).params(requestMap).tag(getActivity()).build().execute(.....)
在特定的位置增加tag(getActivity);同时标记当前界面
2、
 
 
@Override
public void onDestroy() {
    OkHttpUtils.getInstance().cancelTag(getActivity());
    super.onDestroy();
}
在当前界面销毁的时候取消网络请求。
3、
 
 
 @Override
public void onError(Call call, Exception e, int id) {
      if(call.isCanceled()){//关闭界面的取消请求执行这里
             Log.e("aaaa","用户取消了这次请求");
      }else{
             //出现其它错误的时候执行
       }
}

发布了56 篇原创文章 · 获赞 12 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/huwan12345/article/details/78294016