android-dialog token - Android 'Impossible d'ajouter une fenêtre-le jeton null n'est pas pour une application' exception




is not (8)

Je reçois l'exception Android suivante lorsque j'essaie d'ouvrir une boîte de dialogue. Quelqu'un peut-il m'aider s'il vous plaît à 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)

Answers

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

 getApplicationContext()
 mContext which is passed by activity.

Si vous affichez une classe de dialogue sans activité, vous devez passer l'activité en paramètre.

Activity activity=YourActivity.this;

Maintenant, ce sera très bien.

Si vous trouvez un problème, faites le moi savoir.


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

Et n'oubliez pas d'ajouter la permission:

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

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

new Dialog(getApplicationContext());

Donc j'ai dû changer pour:

new Dialog(this);

Et ça marche bien pour moi;)


J'ai essayé avec ceci dans le champ de contexte:

this.getActivity().getParent()

et ça marche bien pour moi. Cela venait d'une classe qui s'étend de "Fragment":

public class filtro extends Fragment{...

Utilisez ceci et le contexte n'a pas fonctionné pour moi .. mais MyActivityName.this a fonctionné. J'espère que cela aidera tous ceux qui en ont besoin.


Je devine - essayez-vous de créer un dialogue 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);

Essayez getParent() à l'endroit du context argument comme new AlertDialog.Builder(getParent()); J'espère que ça va marcher, ça a marché pour moi.


Vous pouvez essayer mon gist . Il définit essentiellement un filtre de couleur sur dessinable.

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.ProgressBar;

public class ColoredProgressBar extends ProgressBar {
   public ColoredProgressBar(Context context) {
      super(context);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs) {
      super(context, attrs);
      if (!isInEditMode())
         init();
   }

   public ColoredProgressBar(Context context, AttributeSet attrs, int defStyle) {
      super(context, attrs, defStyle);
      if (!isInEditMode())
         init();
   }

   /**
    * Changes color.
    */
   private void init() {
      getIndeterminateDrawable().setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY);
   }
}






android android-dialog runtimeexception android-windowmanager