2013-04-26 55 views
1

我有以下錯誤:WindowManagerBadTokenException無法添加窗口

//TODO tryAgain 
private void tryAgain(){ 
    new AlertDialog.Builder(this) 
    .setTitle("Game Over") 
    .setMessage("Times Up!") 
    .setPositiveButton("Try Again?", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
      Intent retry = getIntent(); 
      finish(); 
      startActivity(retry); 
     } 
    }) 
    .setNegativeButton("Back to Menu", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
      Intent i = new Intent(Stage1_3.this, ShapingColors.class); 
      finish(); 
      startActivity(i); 
     } 
    }) 
    .show(); 
} 

基本上就是我想要做的是取消該對話框,然後重新啓動我的當前活動,另一個我想回去菜單活動。我在這裏錯過了什麼?任何幫助表示讚賞。

更新的logcat:

04-27 00:42:44.680: E/AndroidRuntime(330): FATAL EXCEPTION: main 
04-27 00:42:44.680: E/AndroidRuntime(330): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.view.ViewRoot.setView(ViewRoot.java:527) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.view.Window$LocalWindowManager.addView(Window.java:424) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.app.Dialog.show(Dialog.java:241) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.app.AlertDialog$Builder.show(AlertDialog.java:802) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at com.say.shapingcolor.Stage1_3.tryAgain(Stage1_3.java:307) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at com.say.shapingcolor.Stage1_3.access$0(Stage1_3.java:287) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at com.say.shapingcolor.Stage1_3$MyCount.onFinish(Stage1_3.java:319) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.os.CountDownTimer$1.handleMessage(CountDownTimer.java:118) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.os.Handler.dispatchMessage(Handler.java:99) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.os.Looper.loop(Looper.java:123) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
04-27 00:42:44.680: E/AndroidRuntime(330):  at dalvik.system.NativeStart.main(Native Method) 
+0

@Jaguar我已經添加了我的logcat。謝謝 – 2013-04-26 16:50:39

+0

什麼是在線沒有。 Stage1_3.java的307和287(這是您的活動?) – Jaguar 2013-04-26 16:52:31

+0

.show(); = 307和私人無效tryAgain(){= 287 – 2013-04-26 16:53:30

回答

1

,當你表示不再存在上下文的對話框中就會發生這種情況。當您撥打對話框show()時,活動將被破壞。這通常發生在異步操作之後。確保您的活動(您想要顯示對話框)正在運行。

完成後不要調用活動只是創建一個新的意圖並開始活動。像這樣:

private void tryAgain(){ 
    new AlertDialog.Builder(this) 
    .setTitle("Game Over") 
    .setMessage("Times Up!") 
    .setPositiveButton("Try Again?", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
      Intent retry = new Intent(this, Stage1_3.class);//I guess Stage1_3 is the current activity 
      finish(); 
      startActivity(retry); 
     } 
    }) 
    .setNegativeButton("Back to Menu", new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      dialog.cancel(); 
      Intent i = new Intent(Stage1_3.this, ShapingColors.class); 
      finish(); 
      startActivity(i); 
     } 
    }) 
    .show(); 
} 
+0

當我去其他活動時,之前的活動被破壞,因爲我把finish()方法放在裏面。我如何處理這個問題? – 2013-04-26 17:01:35

+0

@neknekmouh是否解決了您的問題? – Jaguar 2013-04-26 17:14:05

+0

所以我改變了這樣的:Intent retry = new Intent(Stage1_3.this,Stage1_3.class); – 2013-04-26 17:35:19

相關問題