2013-04-26 3 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(); 
} 

В основном то, что я хочу сделать, это отменить диалог затем перезагрузить текущую деятельность, а другой я хочу вернуться к деятельности меню. Что мне здесь не хватает? Любая помощь приветствуется.

UPDATE 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 Я добавил свой логарифм. спасибо –

+0

что на линии нет. 307 и 287 Stage1_3.java (это ваша деятельность?) – Jaguar

+0

.show(); = 307 и private void tryAgain() {= 287 –

ответ

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(). Как мне с этим справиться? –

+0

@neknekmouh делает это, решив вашу проблему? – Jaguar

+0

Итак, я изменился следующим образом: Intent retry = new Intent (Stage1_3.this, Stage1_3.class); –

Смежные вопросы