5

Ich entwickle eine Android-Anwendung, in der ich eine asynchrone Aufgabe benutze eine in der Post execute-Methode, wenn ich Fortschrittsdialog schließen eine Ausnahme kommt und Anwendung wird mit Gewalt geschlossen.Fortschrittsdialogfeld gibt Ausnahme in asyntask

Ausnahme kommt, ist:

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) 

Der Code:

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(); 
    } 
} 

Logausgabe:

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) 
+0

Postleitzahl der 'CommonUtility.close_PDialog();' Methode. – user370305

+0

Bitte logcat Ausgabe? – Analizer

+0

Wenn Sie die Zeile entfernen, die die Ausnahme auslöst, bleibt der progressDialog auf dem Bildschirm oder verschwindet er? – Analizer

Antwort

1

Möglicherweise, wenn die Aufgabe beendet ist, und läuft auf seiner OnPostExecute, die Aktivität es wurde in erstellt (und es wurde der Kontext von) wurde bereits zerstört, wenn es um die onPostExecute kam.

Sie könnten es so belassen oder eine progressDialog-Instanz erstellen, die Sie jedes Mal verwenden können, wenn Sie einen Dialog benötigen, und in der onDestroy() -Methode Ihrer Aktivität können Sie sie abbrechen (falls so etwas passiert) .