Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Alertdialog在android中创建异常_Android_Exception_Android Alertdialog - Fatal编程技术网

Alertdialog在android中创建异常

Alertdialog在android中创建异常,android,exception,android-alertdialog,Android,Exception,Android Alertdialog,我正在异步任务onPostexecute方法中使用警报对话框。但我的问题是,当我在异步任务完成之前返回到上一个活动时。警报对话框(Alert.show)出现以下异常。警报对话框将显示在窗口上,但为什么我切换回时其他屏幕上不显示此对话框 Logcat错误: 02-27 05:03:05.283: E/AndroidRuntime(827): FATAL EXCEPTION: main 02-27 05:03:05.283: E/AndroidRuntime(827): android.view.W

我正在异步任务onPostexecute方法中使用警报对话框。但我的问题是,当我在异步任务完成之前返回到上一个活动时。警报对话框(Alert.show)出现以下异常。警报对话框将显示在窗口上,但为什么我切换回时其他屏幕上不显示此对话框

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 android.os.BinderProxy@40f25058 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();
        }
Context mContext=Email.this;
AlertDialog.Builder alert=新建AlertDialog.Builder(mContext);
警报。设置标题(“”);
WebView wv=新的WebView(mContext);
String html=“消息已成功发送”;
wv.loadData(html、“文本/html”、“UTF-8”);
警报。设置视图(wv);
//alert.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
//public void onClick(DialogInterface对话框,int-id){
//                 
//                }
//             });
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(DialogInterface对话框,int-id){
}
});
alert.show();
}

您试图在活动失去可视性后显示一个对话框。您要么不需要调用show(这可能是一个需要捕获的PITA),要么需要捕获该异常并为您的应用程序提供合理的行为。我通常刚刚捕获到异常,但这可能对您来说是不够的。

问题在于,在onPostExecute()中,您有一个警报对话框,并且您正在提供电子邮件活动的上下文。但是您正在导航到其他活动,因此上下文是错误的。因此,您得到了这个错误


最好在异步任务完成后显示进度并允许用户导航。如果您希望它在后台运行,请使用服务。

您必须在onprogressupate mtd上调用alertdialog作为其在主线程上的调用。

尝试如下:

AlertDialog.Builder alert=新建AlertDialog.Builder(Email.this);
警报。设置标题(“”);
WebView wv=新的WebView(Email.this);
String html=“消息已成功发送”;
wv.loadData(html、“文本/html”、“UTF-8”);
警报。设置视图(wv);
//alert.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
//public void onClick(DialogInterface对话框,int-id){
//}
//});
alert.setNegativeButton(“取消”,新建DialogInterface.OnClickListener()){
public void onClick(DialogInterface对话框,int-id){
}
});
AlertDialog builder=alert.create();
builder.show();

可能的原因是警报对话框的上下文。您可能已完成该活动,因此它试图在该上下文中打开,但该上下文已关闭。尝试将该对话框的上下文更改为您的第一个活动,因为它要到最后才会完成

试试下面的代码 e、 g

而不是这个

     AlertDialog alertDialog = new AlertDialog.Builder(this).create();
尝试使用

    AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()).

您可以发布对话框的代码吗?请发布对话框的代码。请尝试在postexecute方法中运行在OnRunOnUIthRead中显示alerdialog的代码。您的对话框代码是用onPostExecute方法编写的吗?这不提供问题的答案。要评论或要求作者澄清,请在他们的帖子下方留下评论——你可以随时对自己的帖子发表评论,一旦你有足够的评论,你就可以发表评论了。
    AlertDialog alertDialog = new AlertDialog.Builder(FirstActivity.getInstance()).