1

我的问题是类似这样的:抛出:IllegalArgumentException驳回在异步任务对话框时

Error on dismissing ProgressDialog in AsyncTask

我有一个创建像这样的onPreExecute对话框的的AsyncTask:

​​

而驳回onPostExecute中的对话框如下所示:

if (dialog != null && dialog.isShowing()) { 
    dialog.dismiss(); 
} 

尽管如此,我从上线的用户在哪里做diolog.dismiss()与消息错误报告: java.lang.IllegalArgumentException异常:查看未连接到窗口管理器

最常见的根本原因是 - 或所以我读过 - 当用户切换方向时(从纵向到横向或反之亦然)。 但我的应用程序被强制为肖像模式,所以这不可能是原因。 (我仔细检查过这确保它确实是不可能的)

之前提到的后记者解决它到底(我读过这个解决方案也别处)通过创建一个内部类活动类中的AsyncTask,以及来自活动类的onCreateDialog并从AsyncTask调用showDialog。 (看他的帖子,如果你不明白这一点) 我开始想实现这一点,但它似乎是的ShowDialog deprected:所以这不是我的解决方案。

最后的解决方案,我发现的是通过简单的捕捉异常。我自己也想到了这一点,但只是作为最后的手段。我更愿意理解真正出现错误的地方,并期待这一点,而不是简单地捕捉异常,也不知道发生了什么。

+0

发布一个完整的stacktrace –

回答

0

如果什么乍得说的是正确的 - 一些设备可能在景观开始​​的几分之一秒 - 然后我认为这是得到的错误的报告最可能的原因。虽然拉金德拉的解决方案也许能防止这种情况,我已经决定了它确实感觉像应用创可贴正如其他人所指出的,由于屏幕旋转是不是真正的问题的唯一来源。

经过一番更多搜寻,我找到了两个解决方案:

  1. 实施的AsyncTask如从应用类,这里说明继承的类的一部分:Handle screen orientation changes when there are AsyncTasks running
  2. 实现onRetainNonConfigurationInstance()/ setRetainInstance()。第一的例子这里给出:http://twigstechtips.blogspot.com/2011/11/for-my-app-moustachify-everything-i-was.html - 然而,这种方法本身弃用,因此,倒不如以类似的方式使用setRetainInstance。

为了完整性,还有Droid-Fu for Android library,声称能够解决这个问题。

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> 

希望这会帮助你。

+0

这应该是AsyncTask而不是AsyncTast? –

+0

对不起............ – Rajendra

+0

我认为@Rejendra正在与这是我遇到的情况:即使你的应用程序被迫为肖像模式,有些设备可能会启动风景几分之一秒,关闭活动并以纵向模式重新启动,导致对话任务出现问题,并可能运行两次后台任务。 Rajendra提供的代码应该注意这一点;如果没有,请检查并查看您的活动是否多次启动并对其进行编码。 –

相关问题