Java Okhttp3在加载请求之前关闭活动时使应用程序崩溃

Java Okhttp3在加载请求之前关闭活动时使应用程序崩溃,java,android,crash,okhttp3,android-runonuithread,Java,Android,Crash,Okhttp3,Android Runonuithread,一切正常。但我正在加载问题片段,并立即单击“上一步”退出应用程序,而不让请求完成。它使应用程序崩溃。我试着四处看看,但找不到能帮助我防止撞车的修复方法。我附上logcat和Questions课程以供参考 logcat 问题课 您必须在onPause()中取消呼叫,因此请以字段的形式进行呼叫: private Call call; 然后将您的loadQuestion()方法更改为: call = client.newCall(request); call.enqueue(new Callback

一切正常。但我正在加载问题片段,并立即单击“上一步”退出应用程序,而不让请求完成。它使应用程序崩溃。我试着四处看看,但找不到能帮助我防止撞车的修复方法。我附上
logcat
Questions
课程以供参考

logcat 问题课
您必须在
onPause()
中取消呼叫,因此请以字段的形式进行呼叫:

private Call call;
然后将您的
loadQuestion()
方法更改为:

call = client.newCall(request);
call.enqueue(new Callback() {
和取消请求:

@Override
public void onPause() {
    super.onPause();
    if (call != null){
        call.cancel();
    }
}

由于您确定如果暂停
片段
,请求的响应会使应用程序崩溃(
异常
),因此您也可以在类中声明一个
布尔值
,如:

private boolean active= true;
然后在您的
恢复中

@Override
public void onResume() {
  super.onResume();
  active= true;

}
然后在您的
onPause

@Override
public void onPause() {
  super.onPause();
  active= false;

}
然后在片段的调用
onResponse
中添加
if
语句:

@Override
public void onResponse(Call call, Response response) throws IOException {
    if(active){
     //Call your extra code here!
   }
}

代码的
onResponse
仍然会从活动中请求很多内容,比如context和getActivity,这些内容可能为空。检查它们是否不为null,然后从那里调用onResponse@Xenolion,如果我不按back键,它们正在工作,只有当我将活动置于暂停状态时才会崩溃。好的,我已经回答了一个有点棘手的解决方案!很抱歉,我应该删除我的评论!
@Override
public void onPause() {
  super.onPause();
  active= false;

}
@Override
public void onResponse(Call call, Response response) throws IOException {
    if(active){
     //Call your extra code here!
   }
}