Cuadro de diálogo de progreso dando excepción en asynchtask
Estoy desarrollando una aplicación android en la que im usando una tarea asincrónica en un post ejecutar el método cuando im cierre cuadro de diálogo de progreso de una excepción está llegando y la aplicación se está cerrando con fuerza.
Excepción viene es:
- ProgressDialog: cómo evitar la ventana filtrada
- AsyncTask con ProgressDialog vs cambio de orientación
- Fragmentos de Android. Retener un AsyncTask durante la rotación de la pantalla o el cambio de configuración
- Espera para AsyncTask ejecutado con ProgressDialog
- Implementación de ProgressDialog en la solicitud de subida múltiple
04-24 09:41:54.661: E/AndroidRuntime(1727): java.lang.IllegalArgumentException: View not attached to window manager 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
El código:
data_insertion = new AsyncTask<Void, Void, Void>() { @Override protected void onPreExecute() { // TODO Auto-generated method stub CommonUtility.show_PDialog(MainActivity.this); super.onPreExecute(); } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub //setting alaram for refresh api CommonUtility.close_PDialog(); //*getting exception on this line* Intent setalaram = new Intent(MainActivity.this, SetAlaram.class); startService(setalaram); Intent i = new Intent(MainActivity.this, PlayListActivity.class); startActivity(i); MainActivity.this.finish(); super.onPostExecute(result); finish(); } @Override protected Void doInBackground(Void...params) { // TODO Auto-generated method stub //some code } return null; } }.execute(null, null, null); //and here is my close method for dilogue public static void close_PDialog() { if (dialog != null && dialog.isShowing()) { dialog.dismiss(); } }
Salida de registro:
04-24 09:41:54.661: E/AndroidRuntime(1727): FATAL EXCEPTION: main 04-24 09:41:54.661: E/AndroidRuntime(1727): java.lang.IllegalArgumentException: View not attached to window manager 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.view.Window$LocalWindowManager.removeView(Window.java:432) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.app.Dialog.dismissDialog(Dialog.java:278) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.app.Dialog.access$000(Dialog.java:71) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.app.Dialog$1.run(Dialog.java:111) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.app.Dialog.dismiss(Dialog.java:268) 04-24 09:41:54.661: E/AndroidRuntime(1727): at commonUtilities.CommonUtility.close_PDialog(CommonUtility.java:233) 04-24 09:41:54.661: E/AndroidRuntime(1727): at com.walkover.filesharing.MainActivity$1.onPostExecute(MainActivity.java:55) 04-24 09:41:54.661: E/AndroidRuntime(1727): at com.walkover.filesharing.MainActivity$1.onPostExecute(MainActivity.java:1) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.os.AsyncTask.finish(AsyncTask.java:417) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.os.AsyncTask.access$300(AsyncTask.java:127) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.os.Handler.dispatchMessage(Handler.java:99) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.os.Looper.loop(Looper.java:130) 04-24 09:41:54.661: E/AndroidRuntime(1727): at android.app.ActivityThread.main(ActivityThread.java:3683) 04-24 09:41:54.661: E/AndroidRuntime(1727): at java.lang.reflect.Method.invokeNative(Native Method) 04-24 09:41:54.661: E/AndroidRuntime(1727): at java.lang.reflect.Method.invoke(Method.java:507) 04-24 09:41:54.661: E/AndroidRuntime(1727): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 04-24 09:41:54.661: E/AndroidRuntime(1727): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 04-24 09:41:54.661: E/AndroidRuntime(1727): at dalvik.system.NativeStart.main(Native Method)
- Diálogo de progreso personalizado con la rotación de imagen Squre con AsynTask
- Pequeño ProgressDialog "spinner" para android
- ProgressDialog está obsoleto. ¿Cuál es el alternativo a utilizar?
- Android: Cómo evitar que el botón Atrás de la cancelación de un FragmentDialog
- Adición de diálogo de progreso de android dentro del servicio de fondo con AsyncTask, Obtención de excepción FATAL
- Cancelar AsyncTask cuando el usuario presiona el botón Atrás
Posiblemente cuando la tarea termina y se ejecuta en su onPostExecute, la Actividad en la que se creó (y se obtuvo el contexto de) ya estaba destruida cuando llegó al onPostExecute.
Puedes dejarlo de esta manera, o hacer una instancia de ProgressDialog en algún lugar que se pueda usar cada vez que necesites un diálogo, y en el método onDestroy () de tu actividad podrías cancelarlo (en caso de que algo así suceda).