WindowManager$BadTokenException

今天在google play上收集到一个程序异常的信息

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406ab4c8 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:532)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:200)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:241)
at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
at com.nttdocomo.communicase.carriermail.activity.MailSettingAccountRecieveActivity$2$1.run(MailSettingAccountRecieveActivity.java:558)
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:3687)
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:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

在线程里弹出dialog的时候 

 new AlertDialog.Builder(
                                                    MailSettingAccountRecieveActivity.this)
                                                    .setTitle(
                                                            getString(R.string.check_failed_title))
                                                    .setMessage(errMessage)
                                                    .setPositiveButton(getString(R.string.ok), null)
                                                    .show();
                                            
                                        }
                                    });

stackflow 上的解释是

The problem is that the dialog need to have the "base" context of your activity, not necessarily the one you're launching it from.

然后我在弹dialog之前加上了这段代码

Activity activity = MailSettingAccountRecieveActivity.this;
                                            while (activity.getParent() != null) {
                                                activity = activity.getParent();
                                            }
                                            new AlertDialog.Builder(activity)
                                                    .setTitle(
                                                            getString(R.string.check_failed_title))
                                                    .setMessage(errMessage)
                                                    .setPositiveButton(
                                                            getString(R.string.ok),
                                                            null).show();
                                            
                                        }
                                    });


 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值