De mon côté activity
, j'ai besoin d'appeler une classe interne et dans une méthode au sein de la classe, j'ai besoin de montrer AlertDialog
. Après l'avoir rejeté, lorsque vous appuyez sur le bouton OK, passez à Google Play pour achat.
Les choses fonctionnent parfaitement pour la plupart du temps, mais pour quelques utilisateurs, il plante builder.show()
et je peux voir "android.view.WindowManager$BadTokenException:
Impossible d'ajouter la fenêtre "dans le journal des pannes. Veuillez suggérer.
Mon code est à peu près comme ceci:
public class classname1 extends Activity{
public void onCreate(Bundle savedInstanceState) {
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.<view>);
//call the <className1> class to execute
}
private class classNamename2 extends AsyncTask<String, Void, String>{
protected String doInBackground(String... params) {}
protected void onPostExecute(String result){
if(page.contains("error"))
{
AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
builder.setCancelable(true);
builder.setMessage("");
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
dialog.dismiss();
if(!<condition>)
{
try
{
String pl = "";
mHelper.<flow>(<class>.this, SKU, RC_REQUEST,
<listener>, pl);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
});
builder.show();
}
}
}
}
J'ai également vu l'erreur dans une autre alerte où je ne transmets à aucune autre activity
. C'est simple comme ça:
AlertDialog.Builder builder = new AlertDialog.Builder(classname1.this);
builder.setCancelable(true);
//if successful
builder.setMessage(" ");
builder.setInverseBackgroundForced(true);
builder.setNeutralButton("Ok",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton){
// dialog.dismiss();
}
});
builder.show();
}
android
android-alertdialog
MSIslam
la source
la source
//send to some other activity
. Je pense que si vous commentez la partie où vous allez à une nouvelle activité, cette erreur disparaîtra. L'erreur semble se produire car votre boîte de dialogue avant est complètement fermée, votre nouvelle activité démarre. Dans leonPostExecute()
, vous avez la boîte de dialogue d'alerte et vous donnez le contexte de l'login
activité. Mais vous naviguez vers l'autre activité, le contexte devient donc erroné. Par conséquent, vous obtenez cette erreur! Voir stackoverflow.com/questions/15104677/... question similaire.Réponses:
Problème:
Raison:
Solution:
par exemple .
Mettre à jour :
Jetons de fenêtre:
Un scénario réel:
la source
J'ai eu un dialogue montrant la fonction:
J'obtenais cette erreur et je devais juste vérifier
isFinishing()
avant d'appeler cette boîte de dialogue affichant la fonction.la source
if(!MyActivity.this.isFinishing())
? Si ce n'est pas bien dans MyActivityLa raison possible est le contexte de la boîte de dialogue d'alerte. Vous avez peut-être terminé cette activité, c'est pourquoi vous essayez d'ouvrir dans ce contexte mais qui est déjà fermé. Essayez de changer le contexte de cette boîte de dialogue pour votre première activité car elle ne sera pas terminée avant la fin.
par exemple
plutôt que ça.
Essayez d'utiliser
la source
essayez ensuite de créer AlterDailog à partir du générateur, puis appelez show ().
la source
Je crée Dialog in
onCreate
et je l'utilise avecshow
ethide
. Pour moi, la cause principale n'était pas de rejeteronBackPressed
, ce qui terminait l'Home
activité.Je terminais l'activité à domicile
onBackPressed
sans fermer / fermer mes boîtes de dialogue.Lorsque j'ai fermé mes dialogues, le crash a disparu.
la source
J'essaye cela résolu.
la source
Essaye ça :
la source
avec cette idée de variables globales, j'ai enregistré l'instance de MainActivity dans onCreate (); Variable globale Android
et ouvrez une boîte de dialogue comme celle-ci. ça a marché.
et dans un fil, j'ouvre un dialogue comme celui-ci.
:)
la source