Java 旋转时异步任务中的IllegalArgumentException

Java 旋转时异步任务中的IllegalArgumentException,java,android,android-asynctask,Java,Android,Android Asynctask,我已经成功地在后台发送了一封电子邮件,并在发送电子邮件时向用户显示了一个进度对话框。然而,当用户在对话框打开时翻转屏幕时,我得到一个IllegalArgumentException。我尝试过使用WeakReference对象,但它似乎无法解决问题。这是我的AsyncTask类 private class SendMailTask extends AsyncTask<Mail, String, EmailStatusResponce> { private final Weak

我已经成功地在后台发送了一封电子邮件,并在发送电子邮件时向用户显示了一个进度对话框。然而,当用户在对话框打开时翻转屏幕时,我得到一个IllegalArgumentException。我尝试过使用WeakReference对象,但它似乎无法解决问题。这是我的AsyncTask类

private class SendMailTask extends AsyncTask<Mail, String, EmailStatusResponce> {

    private final WeakReference<ProgressDialog> weakReference;


    public SendMailTask() {
        ProgressDialog progressDialog = new ProgressDialog(SendReportActivity.this);
        progressDialog.setMessage("Sending...");
        progressDialog.setCancelable(false);
        progressDialog.show();
        weakReference = new WeakReference<>(progressDialog);
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }

    @Override
    protected EmailStatusResponce doInBackground(Mail... mail) {
        return mail[0].send();
    }

    @Override
    protected void onPostExecute(EmailStatusResponce result) {
        super.onPostExecute(result);

        if (result != null && weakReference != null) {
            weakReference.get().dismiss();     // This is where the exception is thrown.

            if (result.isSuccess()) {
                Intent intent = new Intent(SendReportActivity.this, MainActivity.class);
                startActivity(intent);
            }
            else  {}
        }
    }
私有类SendMailTask扩展了AsyncTask{
私人最终WeakReference WeakReference;
公共SendMailTask(){
ProgressDialog ProgressDialog=新建ProgressDialog(SendReportActivity.this);
progressDialog.setMessage(“发送…”);
progressDialog.setCancelable(假);
progressDialog.show();
weakReference=新的weakReference(progressDialog);
}
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
}
@凌驾
受保护的EmailStatusResponse doInBackground(邮件…邮件){
返回邮件[0]。发送();
}
@凌驾
受保护的void onPostExecute(EmailStatusResponse结果){
super.onPostExecute(结果);
if(结果!=null&&weakReference!=null){
weakReference.get().disclose();//这是引发异常的地方。
if(result.issucess()){
意向意向=新意向(SendReportActivity.this,MainActivity.class);
星触觉(意向);
}
else{}
}
}
这是个例外

java.lang.IllegalArgumentException:View=com.android.internal.policy.PhoneWindow$DecorView{688d3e2 V.E……R……D 0,0-1026348}未连接到窗口管理器

提前感谢您的帮助

编辑:更多日志

---------坠机开始 12-11 16:22:40.154 1976-1976/com.blazapps.allenfamilymedicine/AndroidRuntime﹕ 致命异常:主 工艺:com.blazapps.allenfamilymedicine,PID:1976 java.lang.IllegalArgumentException:View=com.android.internal.policy.PhoneWindow$DecorView{f89e667 V.E……R……D 0,0-760232}未连接到窗口管理器 位于android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:424) 在android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:350) 在android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116)中 在android.app.Dialog.dismissDialog(Dialog.java:362) 在android.app.Dialog.disclose(Dialog.java:345)中 位于com.blazapps.allenfamilymedicine.SendReportActivity$SendMailTask.onPostExecute(SendReportActivity.java:168) 位于com.blazapps.allenfamilymedicine.SendReportActivity$SendMailTask.onPostExecute(SendReportActivity.java:138) 位于android.os.AsyncTask.finish(AsyncTask.java:651) 位于android.os.AsyncTask.-wrap1(AsyncTask.java) 位于android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 位于android.os.Handler.dispatchMessage(Handler.java:102) 位于android.os.Looper.loop(Looper.java:148) 位于android.app.ActivityThread.main(ActivityThread.java:5417) 位于java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:726) 位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)


我仍然不知道为什么会抛出异常,但因为我在EmailStatusResponse中保存了大量信息,所以我可以用try-catch来包围异常,如果任务完成,我会得到预期的结果

try {
    weakReference.get().dismiss();
} catch (Exception e) {}

如果有人能想出更好的解决方案,我将不胜感激。我讨厌捕捉异常。通常有更好的方法。

发布更多日志信息(“原因”部分)我添加了您要求的信息。