2013-04-26 58 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

相关问题