我的问题与此类似:
Error on dismissing ProgressDialog in AsyncTask
我有一个AsyncTask,它在onPreExecute中创建一个对话框,如下所示:
dialog = ProgressDialog.show(activity, "login", "logging in, one moment please");
并解除onPostExecute中的对话框,如下所示:
if (dialog != null && dialog.isShowing()) {
dialog.dismiss();
}
仍然,我收到来自用户diolog.dismiss()行的用户的错误报告,并带有以下消息: java.lang.IllegalArgumentException:视图未附加到窗口管理器
最常见的根本原因是 - 或者我读过 - 当用户切换方向时(从纵向到横向,反之亦然)。 然而,我的应用程序被强制为纵向模式,因此这不是原因。 (我已经仔细检查了这一点,以确保它真的不可能)
前面提到的帖子的记者最后通过在活动类中为AsyncTask创建内部类并从活动类中使用onCreateDialog并从中调用showDialog来解决它(我也在其他地方也读过这个解决方案)。 AsyncTask。 (如果你不明白这一点,请阅读他的帖子) 我已经开始尝试实现它,但似乎showDialog被删除了:所以这对我来说不是解决方案。
我发现的最后一个解决方案是通过简单地捕获异常。我自己也想过这个,但只是作为最后的手段。我更愿意理解真正出错的地方,并期待这一点,而不是简单地捕捉异常而不知道发生了什么。
答案 0 :(得分:1)
您应该在manifest.xml中添加它
高达API等级12
<activity
android:label="@string/app_name"
android:name=".Activity_calling_AsyncTask"
android:configChanges="keyboardHidden|orientation">
在apl级别12之后,
<activity
android:label="@string/app_name"
android:name=".Activity_calling_AsyncTask"
android:configChanges="keyboardHidden|orientation|screensize">
</activity>
希望这会对你有所帮助。
答案 1 :(得分:0)
如果Chad所说的是正确的 - 某些设备可能会在几分之一秒内启动 - 那么我认为这是获取错误报告的最可能原因。虽然Rajendra的解决方案可能能够阻止这种情况,但我已经确定它确实像其他人所指出的那样使用创可贴,因为屏幕旋转并不是真正问题的唯一来源。
经过一番搜索后,我找到了两个解决方案:
只是为了完整性,还有Droid-Fu for Android library,声称能够解决这个问题。