web-dev-qa-db-fra.com

Android Exception liée à l'impossibilité d'ajouter une fenêtre. Le jeton n'a pas la valeur null.

J'obtiens l'exception Android suivante lorsque j'essaie d'ouvrir une boîte de dialogue. Quelqu'un peut-il m'aider à comprendre ce qui se passe et comment puis-je résoudre ce problème?

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)
134
michael

Je suppose - essayez-vous de créer Dialog avec un contexte d'application? Quelque chose comme ça:

new Dialog(getApplicationContext());

C'est faux. Vous devez utiliser un contexte d'activité.

Vous devez essayer comme:

new Dialog(YourActivity.this);
419
Peter Knego

Vous pouvez continuer à utiliser getApplicationContext(), mais avant de l'utiliser, vous devez ajouter l'indicateur suivant: dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT). L'erreur ne s'affichera pas.

Et n'oubliez pas d'ajouter une permission:

<uses-permission Android:name="Android.permission.SYSTEM_ALERT_WINDOW" />
34
codezjx

Dans mon cas, j'essayais de créer mon dialogue comme ceci:

new Dialog(getApplicationContext());

J'ai donc dû changer pour:

new Dialog(this);

Et ça marche bien pour moi;)

12
postNuKe

Essayez getParent() à la place de l'argument context comme new AlertDialog.Builder(getParent()); J'espère que cela fonctionnera, cela a fonctionné pour moi.

12
Priyank Joshi

Je suppose - essayez-vous de créer un dialogue en utilisant.

 getApplicationContext()
 mContext which is passed by activity.

si vous affichez une classe de non-activité de dialogue, vous devez alors passer l'activité en tant que paramètre.

Activity activity=YourActivity.this;

Maintenant, ce sera un excellent travail.

Si vous rencontrez des problèmes, faites le moi savoir.

3
Harshid

J'ai essayé avec ceci dans le champ contextuel:

this.getActivity().getParent()

et ça marche bien pour moi. C'était à partir d'une classe qui s'étend de "Fragment":

public class filtro extends Fragment{...
2
Matias

Bonjour, si vous utilisez un adaptateur, il y a peut-être une chance.
Tout ce que vous avez besoin de savoir lorsque vous utilisez une boîte de dialogue dans adapter, getContext (), contexte ou activité ne fonctionnera pas à un moment donné.

Voici le tour que j’ai utilisé v.getRootView().getContext() où v est l’objet de vue que vous référencez.
Par exemple.


            @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
1
kontashi35

J'ai la même exception. Ce que je fais pour résoudre ce problème est de passer une instance de la boîte de dialogue en tant que paramètre dans une fonction et de l'utiliser au lieu de passer uniquement le contexte, puis à l'aide de getContext (). cette solution résoud mon problème, espérons que cela pourra aider

1
Anonymous-E

J'ai eu cette exception lorsque j'ai essayé d'ouvrir Progress Dialog sous Cordova Plugin en utilisant ci-dessous deux cas,

  1. nouveau ProgressDialog (this.cordova.getActivity (). getParent ());

  2. nouveau ProgressDialog (this.cordova.getActivity (). getApplicationContext ());

Changé plus tard comme ça,

new ProgressDialog (this.cordova.getActivity ());

Cela fonctionne bien pour moi.

0
soorya

Utilisez ceci et le contexte ne fonctionne pas pour moi..mais MyActivityName.Cela a fonctionné. J'espère que cela aide tous ceux qui en ont besoin.

0
Makvin

J'ai résolu cette erreur en ajoutant ci-dessous l'autorisation de l'utilisateur dans AndroidManifest.xml

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

En outre, la boîte de dialogue Initialiser l'alerte avec le nom de l'activité:

AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this);

Pour plus de détails, visitez ==> Comment créer un dialogue d'alerte sous Android

0
Ganesh Garad