java - 旋转时 AsyncTask 中的 IllegalArgumentException

标签 java android android-asynctask

我已经在后台成功发送了一封电子邮件,并在发送电子邮件时向用户显示了一个进度对话框。但是,当用户在对话框打开时翻转屏幕时,我得到一个 IllegalArgumentException。我试过使用 Wea​​kReference 对象,但它似乎没有解决问题。这是我的 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  {}
        }
    }

这是异常(exception)

java.lang.IllegalArgumentException: View=com.android.internal.policy.PhoneWindow$DecorView{688d3e2 V.E...... R......D 0,0-1026,348} not attached to window manager

在此先感谢您提供的所有帮助。

编辑:更多 logcat

--------- beginning of crash 12-11 16:22:40.154 1976-1976/com.blazapps.allenfamilymedicine E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.blazapps.allenfamilymedicine, PID: 1976 java.lang.IllegalArgumentException: View=com.android.internal.policy.PhoneWindow$DecorView{f89e667 V.E...... R......D 0,0-760,232} not attached to window manager at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:424) at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:350) at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:116) at android.app.Dialog.dismissDialog(Dialog.java:362) at android.app.Dialog.dismiss(Dialog.java:345) at com.blazapps.allenfamilymedicine.SendReportActivity$SendMailTask.onPostExecute(SendReportActivity.java:168) at com.blazapps.allenfamilymedicine.SendReportActivity$SendMailTask.onPostExecute(SendReportActivity.java:138) at android.os.AsyncTask.finish(AsyncTask.java:651) at android.os.AsyncTask.-wrap1(AsyncTask.java) at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

最佳答案

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

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

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

关于java - 旋转时 AsyncTask 中的 IllegalArgumentException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34230804/

相关文章:

java - 调试 Java 进程在 1 小时内被杀死

java - OpenShift 上的 OutOfMemoryError

java - 无法解析符号网络 android studio

java - SharedPreferences 未保存在 EditTexts 中

java - 从缓存中恢复图片时android OutOfMemoryError

java - RecyclerView.Adapter类查询

java - 更新 Firebase 中的键值

android - 在 Android 上无法查看使用 PhoneGap 保存的联系人

android - 是什么杀死了 Android AsyncTask?

android - 如何从 AsyncTask 抛出异常并在外部处理