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插件下的进度对话框时,

  1. 新的ProgressDialog(this.cordova.getActivity()。getParent());

  2. 新的ProgressDialog(this.cordova.getActivity()。getApplicationContext());

后来改成这样了,

新的ProgressDialog(this.cordova.getActivity());

它为我工作很好。