2013-02-27 35 views
2

我在異步任務onPostexecute方法中使用Alert-dialog。但是我的問題是當我在異步任務完成前回到之前的活動。Alertdialog(alert.show)給出以下異常。 Alertdialog將出現在窗口中,但是爲什麼當我切換回來時,這不會顯示在其他屏幕中。Alertdialog在android中創建異常

logcat的錯誤:

02-27 05:03:05.283: E/AndroidRuntime(827): FATAL EXCEPTION: main 
02-27 05:03:05.283: E/AndroidRuntime(827): android.view.WindowManager$BadTokenException: Unable to add window -- token [email protected] is not valid; is your activity running? 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.view.ViewRootImpl.setView(ViewRootImpl.java:567) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.app.Dialog.show(Dialog.java:281) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.app.AlertDialog$Builder.show(AlertDialog.java:951) 
02-27 05:03:05.283: E/AndroidRuntime(827): at com.example.parentportal.Email$emailtask.onPostExecute(Email.java:119) 
02-27 05:03:05.283: E/AndroidRuntime(827): at com.example.parentportal.Email$emailtask.onPostExecute(Email.java:1) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.os.AsyncTask.finish(AsyncTask.java:631) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.os.AsyncTask.access$600(AsyncTask.java:177) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.os.Handler.dispatchMessage(Handler.java:99) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.os.Looper.loop(Looper.java:137) 
02-27 05:03:05.283: E/AndroidRuntime(827): at android.app.ActivityThread.main(ActivityThread.java:5039) 
02-27 05:03:05.283: E/AndroidRuntime(827): at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 05:03:05.283: E/AndroidRuntime(827): at java.lang.reflect.Method.invoke(Method.java:511) 
02-27 05:03:05.283: E/AndroidRuntime(827): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
02-27 05:03:05.283: E/AndroidRuntime(827): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
02-27 05:03:05.283: E/AndroidRuntime(827): at dalvik.system.NativeStart.main(Native Method) 

代碼

Context mContext = Email.this; 
       AlertDialog.Builder alert = new AlertDialog.Builder(mContext); 

       alert.setTitle(""); 
       WebView wv = new WebView(mContext); 
       String html = "<h3>Message has been sent successfully</h3>"; 

       wv.loadData(html, "text/html", "UTF-8"); 
       alert.setView(wv); 
//    alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
//    public void onClick(DialogInterface dialog, int id){ 
//     
//    } 
//    }); 
       alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
        public void onClick(DialogInterface dialog, int id){ 

        } 
       }); 
       alert.show(); 
     } 
+0

你可以發表你的代碼對話框 – Dilip 2013-02-27 05:15:31

+0

請發表您的代碼的對話框 – GrIsHu 2013-02-27 05:18:22

+0

嘗試運行顯示alerdialog在上runonUIthread在postexecute方法的代碼。 – GrIsHu 2013-02-27 05:23:23

回答

2

問題是因爲在onPostExecute()中,您有警報對話框,並且您正在給出電子郵件活動的上下文。但是你正在導航到其他活動,所以上下文是錯誤的。因此你得到這個錯誤!

更好地顯示進度並允許用戶在完成asynctask後導航。如果您希望它在後臺運行,請使用服務。

0

你試圖顯示一個對話框後,您的活動已經失去了可視性。您或者不需要調用show(可以是PITA來捕獲),或者您需要捕獲該異常併爲您的應用程序提供合理的行爲。我通常只是發現了這個例外,但這對你來說可能會或可能不足夠。

0

您必須調用onprogressupate mtd上的alertdialog作爲其在主線程上的調用。

+0

這不提供問題的答案。要批評或要求作者澄清,在他們的帖子下留下評論 - 你可以隨時評論你自己的帖子,一旦你有足夠的[聲譽](http://stackoverflow.com/faq#reputation),你將能夠[評論任何帖子](http://stackoverflow.com/privileges/comment)。 – Renjith 2013-02-27 05:49:51

1

試試如下:

AlertDialog.Builder alert = new AlertDialog.Builder(Email.this); 
     alert.setTitle(""); 
      WebView wv = new WebView(Email.this); 
      String html = "<h3>Message has been sent successfully</h3>"; 
      wv.loadData(html, "text/html", "UTF-8"); 
      alert.setView(wv); 
     // alert.setPositiveButton("Yes", new DialogInterface.OnClickListener(){ 
     //public void onClick(DialogInterface dialog, int id){ 
     //} 
     //}); 
      alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener(){ 
       public void onClick(DialogInterface dialog, int id){ 
       } 
      }); 
     AlertDialog builder = alert.create(); 
    builder.show(); 
0

可能的原因是警告對話框的情況下。你可能會完成那個活動,所以它試圖在上下文中打開,但已經關閉。嘗試將該對話框的上下文更改爲您的第一個活動,因爲它不會結束。

試試下面的代碼 e.g

,而不是這個。

 AlertDialog alertDialog = new AlertDialog.Builder(this).create(); 

嘗試使用

AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()). 
相關問題