dialog-Unable to add window--is your activity running?

问题描述

Unable to add window--is your activity running?

android 判断网络连接问题,网络连接不上的时候弹出提示框;问题是退出应用再一次进入时应用就直接挂掉了;报错:android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@4255c7e0 is not valid; is your activity running?
代码见下面;注销掉部分是我尝试解决的方法,但这样做的问题是第二次Dialog好像会不出现,或者就是隔很久很久才出现(导致我以为没有出现。。)反正就是有问题,能百度到的方法都试了,不行。。求大神帮忙

/**
     * 网连接超时提示
     */
    private void netTimeOut(){
             AlertDialog.Builder builder3 =new AlertDialog.Builder(MainActivity.this);
             builder3.setTitle(R.string.dia_title);
             builder3.setMessage(log_no);
             builder3.setNegativeButton(R.string.dia_retry, new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface arg0, int arg1) {
                    arg0.dismiss();
                    MainActivity.this.finish();
                    restartApplication();

                }
            });
             builder3.setPositiveButton(R.string.dia_exit, new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface arg0, int arg1) {
                        arg0.dismiss();
                        ActivityManag.avtivityClose();

                    }
                });
             builder3.create().show();

            /*if(this.isTaskRoot()) {
                builder3.create().show();
            } else {
                builder3 = null;

            }*/

    }

解决方案

is your activity running?对于new AlertDialog.Builder(MainActivity.this);中你的MainActivity是否已经启动,然后再弹出对话框,不然对话框没有
依附,所以报错。

1,错误分析:

从错误信息我们也可以明白其原因,此问题根本原因就是由于将要弹出的dialog所要依附的View已经不存在导致的。

2,什么地方可能照成此问题:当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行了。

此外,很多时候我们需要通过一个非组件类来调用一个view类的方法来弹出dialog或Toast,这样就需要再提供一个静态context来创建这个dialog或者Toast

例如我们在一个view中通过一个静态类来弹出一个对话框:AlertDialog.Builder builder = new AlertDialog.Builder(mContextNew);当然并不是所有静态context都是可以用来创建dialog的,例如***App().getApplication().getApplicationContext()这个context就不行,因为它并不代表哪一个Activity或者View。。这样就无法add这个dialog。

此view用于绑定显示数据,我们在其构造方法中初始化一个静态变量mContextNew为此view的mContext。这样我们就可以通过一个静态类来弹出对话框了,只需传入这个静态的context(mContextNew)就可以了。。但是这个静态的context如果只在构造方法中初始化的话是会存在问题的,因为如果另起了一个界面其绑定数据的view也是用的这个view那么这个静态context就会被重新修改。。因此当这个新的界面finish后返回到上次的界面,这个静态的context是刚才已经finish的view的context。因此如果仍然传入这个静态变量通过一个静态类来弹出对话框就会出现上述找不到window的错误了。

解决办法:

对于tab页出现的错误可以用其父类的context来弹出dialog;对于界面已经销毁引起的错误就只能判断界面是否存在然后再弹出了;对于利用静态context来弹出的dialog可以通过规避的方式来解决,比如避免出现静态context被修改。。但是这样就可能限制了我们程序的功能。。因此我们可以通过在bind数据时时时更新这个静态context就可以解决此问题了,这样就可以保证这个静态的context在任何view中都是当前的界面的view的context。就不会出现找不到其父类window了。

解决方案二:

求积分求积分求积分求积分求积分

解决方案三:

额。。。你能解决这个问题吗?

时间: 2024-12-06 22:02:33

dialog-Unable to add window--is your activity running?的相关文章

Dialog(四)——报错Unable to add window -- token null is not for an application

/** * 问题描述: * 创建和显示对话框的时候报错 * Unable to add window -- token null is not for an application * * 问题修正: * 不可使用Builder builder=new Builder(getApplicationContext()); * 应该使用Builder builder=new Builder(MainActivity.this); */ private void showDialog(){ Dialo

android-自定义软键盘用popupwindow弹出,点击按钮报错Unable to add window

问题描述 自定义软键盘用popupwindow弹出,点击按钮报错Unable to add window 自定义的键盘用的android.inputmethodservice.KeyboardView系统的软键盘 然后点击其中一个按钮就会报错 报的错: android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@41601028 is not val

ActivityGroup中出现的Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@

原文:http://blog.csdn.net/fxtxz2/article/details/7921131 08-29 15:46:14.930: E/AndroidRuntime(28804): android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@40603cc0 is not valid

android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an appli

 错误产生:  Java代码  private Context mcontext;          @Override       protected void onCreate(Bundle savedInstanceState) {mcontext = getApplicationContext();           System.out.println("mcontext=" + mcontext);          }   Java代码  new AlertDialog

Mootools add window onload event

In IE7, the following code will not do if the html page has little content window.addEvent("domready", function() { $(window).addEvents( { "load" : loadListener }); function loadListener() { window.alert("Window has loaded!")

Android 经典笔记七 全局弹窗Dialog

目录介绍 1.全局弹窗分析 2.全局弹窗必要条件 3.全局弹窗实现方式 3.1. 利用系统弹出dialog 3.2. 获取WindowManager,直接添加view 3.3. 在服务里,获取栈顶的Activity,弹窗 4.Dialog实现全局Loading加载框 4.1. 自定义Loading类 4.2. 给自定义的Dialog添加自定义属性 4.3. Loading布局 4.4. 开始使用 5.遇到的问题 5.1. 权限问题 5.2. Unable to add window 6.其他说明

android-启动程序中的Progress Dialog 时的错误

问题描述 启动程序中的Progress Dialog 时的错误 当我想启动程序中的Progress Dialog 时发生的异常: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application at android.view.ViewRoot.setView(ViewRoot.java:531) at android.view.WindowMana

iOS打包出现的问题Unable to validate your application.

问题描述 iOS打包出现的问题Unable to validate your application. 这个问题打扰了我一天了,希望有大神能帮忙解决!谢谢! 解决方案 PopupWindow出现android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?的异常是因为PopupWindow需要依附在一个创建好的Activ

fragment-Android: AlertDialog优先级

问题描述 Android: AlertDialog优先级 OnPreferenceClickListener函数创建了一个新的AlertDialog.当我运行程序时有下面的异常: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application 代码有什么错误? public static class PrefsFragment extends Pr