Ошибка при закрытии ProgressDialog в AsyncTask - PullRequest
0 голосов
/ 13 марта 2012

У меня есть совершенно отдельный класс, который расширяет AsyncTask, я использую его для выполнения html get, поэтому он не замораживает пользовательский интерфейс.В конструкторе AsyncTask я передаю контекст действия, который вызывает .execute () задачи, поэтому я могу показать ProgressDialog во время работы htmlget.Здесь возникла первая проблема: при повороте телефона текущий вид разрушался, а когда приложение достигало .dismiss () диалога, оно зависало, так как вид, к которому он был прикреплен, больше не существует.Мне удалось решить эту проблему примерно в 95% случаев, однако в оставшихся 5% проблема остается.Моим первоначальным решением было принудительно отключить вращение, когда htmlget работает, также передав действие AsyncTask, вызывая

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

в onPreExecute () и вызывая

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

в onPostExecute (), таким образом, даже если пользователь поворачивает экран, он не разрушит текущую активность.Но, как я уже упоминал, в оставшихся 5% все еще существует проблема, которая вызывает сближение сил.Все, что я знаю, это:

У меня есть эта StackTrace, которую мои пользователи предоставили мне через Android Market:

java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:381)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:226)
at android.view.Window$LocalWindowManager.removeView(Window.java:432)
at android.app.Dialog.dismissDialog(Dialog.java:278)
at android.app.Dialog.access$000(Dialog.java:71)
at android.app.Dialog$1.run(Dialog.java:111)
at android.app.Dialog.dismiss(Dialog.java:268)
at com.vasga.telvira.AsyncHttpGetter.onPostExecute(AsyncHttpGetter.java:160)
at com.vasga.telvira.AsyncHttpGetter.onPostExecute(AsyncHttpGetter.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3691)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
at dalvik.system.NativeStart.main(Native Method)

это происходит в AsyncTask, на следующей строке (это160-я строка упоминается в StackTrace):

if(pd.isShowing()) pd.dismiss(); //dismiss the pd after we are done, if it is visible(it should be)

pd.isShowing () не может вызвать это, поскольку я добавил, что если в качестве возможного решения предложено условие, возможно, в некоторых редких случаях диалоговое окно не показывалось,но это не сработало

мое приложение совместимо с android 1.6.x, но в eclipse установлен уровень компиляции для android 2.2.x, так как у меня включена функция «move to sd card»

Судя по немногим отправленным пользователем сообщениям, они запускают htmlget, они, скорее всего, видят всплывающее окно ProgressDialog, а затем происходит сбой приложения

Есть идеи, что может вызвать это?Или как это решить?Мой подход NOSENSOR правильный?

1 Ответ

0 голосов
/ 14 марта 2012

похоже, что ошибка ушла, по крайней мере, я не получил никаких новых отчетов в новой версии.Я переопределил это в основном упражнении:

public Dialog onCreateDialog(int id)

, затем я передал задание в задание и вначале установил nosensor thingie, затем, когда показал диалог, сделал это:

activity.showDialog(0);

затем, когда мне пришлось отменить это, я сделал это:

activity.dismissDialog(0);

Кажется, это работает так.Простите, если есть синтаксическая ошибка, я не на моем компьютере разработчика:)

...