Android 安卓&x27;无法添加窗口--令牌null不适用于应用程序';例外

Android 安卓&x27;无法添加窗口--令牌null不适用于应用程序';例外,android,android-dialog,runtimeexception,android-windowmanager,Android,Android Dialog,Runtimeexception,Android Windowmanager,当我试图打开一个对话框时,我得到以下Android异常。有人能帮我了解发生了什么,我如何解决这个问题吗 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application at android.view.ViewRoot.setView(ViewRoot.java:509) at android.view.WindowManage

当我试图打开一个对话框时,我得到以下Android异常。有人能帮我了解发生了什么,我如何解决这个问题吗

android.view.WindowManager$BadTokenException: 
  Unable to add window -- token null is not for an application
    at android.view.ViewRoot.setView(ViewRoot.java:509)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.app.Dialog.show(Dialog.java:241)

我猜-您是否正在尝试使用应用程序上下文创建对话框?大概是这样的:

new Dialog(getApplicationContext());
new Dialog(getApplicationContext());
这是错误的。您需要使用活动上下文

你必须像这样尝试:

new Dialog(YourActivity.this);

context
的参数位置尝试
getParent()
,如
newalertdialog.Builder(getParent())希望它能起作用,它对我起作用。

在我的情况下,我试图创建如下对话框:

new Dialog(getApplicationContext());
new Dialog(getApplicationContext());
因此,我不得不换衣服:

new Dialog(this);

这对我来说很好;)

我在上下文字段中尝试了这个:

this.getActivity().getParent()
这对我来说很好。这是一个从“Fragment”扩展而来的类:


我猜-您正在尝试使用创建对话框。

 getApplicationContext()
 mContext which is passed by activity.
如果显示对话框非活动类,则必须将活动作为参数传递

Activity activity=YourActivity.this;
现在它将是伟大的工作


如果您发现任何问题,请告诉我。

您可以继续使用
getApplicationContext()
,但在使用之前,您应该添加以下标志:
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE\u SYSTEM\u ALERT)
,并且错误不会显示

别忘了添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

当我尝试使用以下两种情况打开Cordova插件下的进度对话框时,我遇到了这个异常

  • 新建ProgressDialog(this.cordova.getActivity().getParent())

  • 新建ProgressDialog(this.cordova.getActivity().getApplicationContext())

  • 后来就这样变了,

    新建ProgressDialog(this.cordova.getActivity())


    它对我来说很好。

    使用它,上下文对我来说不起作用。但是MyActivityName.this起作用了。希望这能帮助任何需要它的人。

    我也有同样的例外。我要解决的是传递对话框的实例
    作为参数输入函数,并使用它,而不是只传递上下文,然后使用getContext()。此解决方案解决了我的问题,希望能对我有所帮助。

    我通过在AndroidManifest.xml中添加以下用户权限解决了此错误

     <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    

    有关更多详细信息,请访问==>

    您好,如果您正在使用适配器,则可能有机会。
    当您使用适配器、getContext()中的任何对话框时,您需要知道的是,上下文或活动有时无法工作

    这是我使用的技巧
    v.getRootView().getContext()
    其中v是您正在引用的视图对象。
    例如

    
                @Override
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    new DatePickerDialog(v.getRootView().getContext(), date, myCalendar
                            .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                            myCalendar.get(Calendar.DAY_OF_MONTH)).show();
                }
            });  
    If you are getting this problem because of alert dialog.
    Refer [here][1] But it is same concept.
    
    
      [1]: https://stackoverflow.com/questions/6367771/displaying-alertdialog-inside-a-custom-listadapter-class
    

    以防您试图从片段中显示对话框。 只需使用“getActivity()”方法


    如果不发布一些代码,我们怎么知道呢?可能重复的请参考此答案,此答案的主要链接是此答案的评论中有很好的对话,其中描述了为什么会出现此问题,以及如果您使用此服务,什么是处理此问题的最佳方法,请阅读。谢谢。但是我没有使用新对话框(getApplicationContext());我只使用“new AlertDialog.Builder(McContext);”其中mContext是活动的引用。那么mContext应该是MyActivity.this。用于创建自定义对话框的android文档()有此错误。Context mContext=getApplicationContext();对话框=新建对话框(mContext);您的修复导致对话框=新建对话框(此);真管用!谢谢(从一段时间以来)已经确定了。只是指出这一点以供参考。模式也得到了改进。:)使用
    getActivity()
    @sagardevangawh为什么使用getParent()?,这是什么意思?当您在另一个类中显示任何未扩展Activity类的对话框时,您可能无法获取扩展Activity类的该类的上下文。因此,要在类中获取您试图显示对话框但不扩展活动的上下文,您可以使用getParent()返回高级活动的上下文。感谢@PriyankJoshi,您拯救了我的一天,它还解决了“Android无法添加窗口无效;您的活动正在运行”这一奇怪的异常.我如何使用getParent()?谢谢!在我的情况下是有效的。我正在调用
    this.parent.getActivity().getApplicationContext()
    ,但是
    this.parent.getActivity()
    成功了。是的,非常简单。别忘了添加权限,我刚刚编辑过。不能在RecyclerAdapter中使用getActivity(),太棒了:)你如何添加标志?你的答案是正确的,但它只在你处于活动范围时才起作用。如果您在内部作用域中,则必须使用
    MyActivity.class
    而不是
    this
    ,因为
    this
    引用了不同的对象。此外,
    this
    将确保您的
    对话框继承您的主题。谢谢!为了节省我宝贵的时间!!(^_^)
    
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());