5

私は非同期タスクを使用してポスト実行メソッドを使用するアンドロイドアプリケーションを開発しています。進捗ダイアログボックスを閉じるときに例外が発生し、アプリケーションが強制的に終了しています。来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

+0

logcat出力を投稿してください – Analizer

+0

例外をスローする行を削除すると、progressDialogが画面上に残っているのか、それとも消えますか? – Analizer

答えて

1

タスクが終了し、そのonPostExecute、活動その上に実行されそれがonPostExecuteに来たときにすでに作成されていました。

ダイアログを必要とするたびにprogressDialogインスタンスをどこかに使用して、アクティビティのonDestroy()メソッドでキャンセルすることができます(このような場合に備えて) 。

関連する問題