Von meinem Hauptteil aus activity
muss ich eine innere Klasse aufrufen und in einer Methode innerhalb der Klasse muss ich zeigen AlertDialog
. Wenn Sie nach dem Schließen die OK-Taste drücken, leiten Sie sie zum Kauf an Google Play weiter.
Die Dinge funktionieren meistens perfekt, aber für einige Benutzer stürzt es ab builder.show()
und ich kann im "android.view.WindowManager$BadTokenException:
Absturzprotokoll sehen, dass kein Fenster hinzugefügt werden kann . Bitte vorschlagen.
Mein Code ist ziemlich ähnlich:
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();
}
}
}
}
Ich habe den Fehler auch in einer anderen Warnung gesehen, in der ich nicht an eine andere weiterleite activity
. So einfach ist das:
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
quelle
quelle
//send to some other activity
. Ich denke, wenn Sie den Teil kommentieren, in dem Sie zu einer neuen Aktivität gehen, wird dieser Fehler verschwinden. Der Fehler scheint aufzutreten, da Ihr vorheriger Dialog vollständig geschlossen wird und Ihre neue Aktivität beginnt. In deronPostExecute()
haben Sie den Warndialog und geben den Kontext derlogin
Aktivität an. Sie navigieren jedoch zu der anderen Aktivität, sodass der Kontext falsch wird. Daher erhalten Sie diesen Fehler! Siehe stackoverflow.com/questions/15104677/… ähnliche Frage.Antworten:
Problem :
Grund :
Lösung:
zB .
Update:
Fenstertoken:
Ein reales Szenario:
quelle
Ich hatte einen Dialog, der die Funktion zeigte:
Ich habe diesen Fehler erhalten und musste ihn nur überprüfen,
isFinishing()
bevor ich diesen Dialog mit der Funktion aufrief.quelle
if(!MyActivity.this.isFinishing())
? Wenn es in MyActivity nicht richtig istDer mögliche Grund ist der Kontext des Alarmdialogs. Möglicherweise haben Sie diese Aktivität beendet, sodass versucht wird, sie in diesem Kontext zu öffnen, der jedoch bereits geschlossen ist. Versuchen Sie, den Kontext dieses Dialogfelds auf Ihre erste Aktivität zu ändern, da er erst am Ende abgeschlossen sein wird.
z.B
lieber als das.
versuchen zu benutzen
quelle
Versuchen Sie anschließend, AlterDailog aus dem Builder zu erstellen, und rufen Sie dann show () auf.
quelle
Ich erstelle einen Dialog in
onCreate
und benutze ihn mitshow
undhide
. Für mich war die Grundursache nicht das EntlassenonBackPressed
, was dieHome
Aktivität beendete.Ich habe die Heimaktivität beendet,
onBackPressed
ohne meine Dialoge zu schließen / zu schließen.Als ich meine Dialoge schloss, verschwand der Absturz.
quelle
Ich versuche das zu lösen.
quelle
Versuche dies :
quelle
Mit dieser Idee für globale Variablen habe ich die MainActivity-Instanz in onCreate () gespeichert. Globale Android-Variable
und Dialog wie folgt öffnen. es funktionierte.
und in einem Thread öffne ich einen solchen Dialog.
:)
quelle