2013-10-08 18 views
0
android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
at android.view.ViewRoot.setView(ViewRoot.java:528) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177) 
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
at android.view.Window$LocalWindowManager.addView(Window.java:424) 
at android.app.Dialog.show(Dialog.java:241) 
at android.app.Activity.showDialog(Activity.java:2569) 
at android.app.Activity.showDialog(Activity.java:2527) 
at MyCode$8$4.run(MyCode.java:557) 
at android.os.Handler.handleCallback(Handler.java:587) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:130) 
at android.app.ActivityThread.main(ActivityThread.java:3683) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636) 
at dalvik.system.NativeStart.main(Native Method) 

我在執行下面的代碼時遇到了以上異常。該文件對話框將在處理完成並且進度條達到100%時顯示。 FileSaveDialog擴展對話框和工具OnCompletionListenerBadTokenException即使涉及到活動而不是應用程序上下文

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     showDialog(error.Code());//Line 557 
    } 
}); 

    @Override 
protected Dialog onCreateDialog(int id) { 
    Dialog dialog; 
    AlertDialog.Builder builder; 
    final ScrollView scrollView = new ScrollView(this); 
    final TextView textView = new TextView(this); 

    switch (id) { 
    // Other cases are here 
    case 4: 
     File playFile = new File(mediaPath, TEMP_WAV_FILE_NAME); 

     dialog = new FileSaveDialog(this, getResources(), 
       playFile.getAbsolutePath(), saveDiscardHandler); 
     dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { 
      @Override 
      public void onCancel(DialogInterface dialog) { 
       // do whatever you want the back key to do 
       cleanUp(); 
      } 
     }); 

     break; 
    // Other cases are here 
    default: 
     dialog = null; 
    } 
    return dialog; 
} 
+0

按照[鏈接](http://stackoverflow.com/questions/10429213/windowmanagerbadtokenexception-in-android/10429486#10429486)它可能會幫助你.. –

+0

你不能在線程中顯示對話框。請刪除處理程序代碼,只需簡單地顯示對話框。該對話框在UI中運行,因此不要嘗試在單獨的線程中顯示它。 – GrIsHu

+0

試試[this](http://stackoverflow.com/a/18665887/1554935)。它肯定會幫助你。 –

回答

1

您必須檢查活動isFinishing()如果活動結束,返回true;否則返回false。

相關問題