Android'无法添加窗口 – 令牌null不适用于应用程序'exception
当我尝试打开对话框时,出现以下Androidexception。 有人可以帮我理解发生了什么,我该如何解决这个问题?
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)
我猜 – 你是否试图创build一个应用程序上下文的对话框? 像这样的东西:
new Dialog(getApplicationContext());
这是错误的。 您需要使用一个活动上下文。
你必须尝试像:
new Dialog(YourActivity.this);
您可以继续使用getApplicationContext()
,但在使用之前,您应该添加此标志: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
,并且不会显示错误。
不要忘记添加权限:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
尝试getParent()
在new AlertDialog.Builder(getParent());
context
的参数位置new AlertDialog.Builder(getParent());
希望它会起作用,它为我工作。
在我的情况下,我试图创build我的对话框是这样的:
new Dialog(getApplicationContext());
所以我不得不改变:
new Dialog(this);
而且对我来说工作正常;)
我猜 – 你是否正在尝试使用创build对话框。
getApplicationContext() mContext which is passed by activity.
如果您显示对话框非活动类,则必须将活动作为parameter passing。
Activity activity=YourActivity.this;
现在,这将是伟大的工作。
如果您发现任何问题,请告诉我。
我在上下文领域尝试了这一点:
this.getActivity().getParent()
对我来说工作正常。 这是从“片段”延伸出来的一个类:
public class filtro extends Fragment{...
我得到这个exception,当我试图通过使用以下两种情况下打开Cordova插件下的进度对话框时,
-
新的ProgressDialog(this.cordova.getActivity()。getParent());
-
新的ProgressDialog(this.cordova.getActivity()。getApplicationContext());
后来改成这样了,
新的ProgressDialog(this.cordova.getActivity());
它为我工作很好。