Android 安卓&x27;无法添加窗口--令牌null不适用于应用程序';例外
当我试图打开一个对话框时,我得到以下Android异常。有人能帮我了解发生了什么,我如何解决这个问题吗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.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());