5

我正在開發一個android應用程序,其中我使用異步任務在post執行方法中,當我關閉進度對話框時,異常即將到來,應用程序正在強制關閉。在asynchtask中給出異常的進度對話框

異常未來是:

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) 

的代碼:

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

日誌輸出:

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

CommonUtility.close_PDialog()方法的後綴代碼。 – user370305 2013-04-24 09:58:46

+0

請發佈logcat輸出? – Analizer 2013-04-24 10:05:52

+0

如果您刪除引發異常的行,progressDialog是停留在屏幕上還是消失? – Analizer 2013-04-24 10:20:40

回答

1

可能當任務結束,運行在其onPostExecute,活動它在onPostExecute中被創建(並且獲取了上下文)已經被銷燬。

你可以這樣離開它,或者讓一個progressDialog實例在每次需要對話時都可以使用的地方,並且在你的activity的onDestroy()方法中可以取消它(如果發生這種情況) 。