在快速切换界面的时候,容易丢失上下文,如果不取消请求的话有可能会导致请求的结果无法放到界面中,应为界面已经销毁了,容易报空指针,捕获不到,界面就挂了。背景知识,不同版本的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{ //出现其它错误的时候执行 } }