Dal mio main activity
, devo chiamare una classe interna e in un metodo all'interno della classe, devo mostrare AlertDialog
. Dopo averlo chiuso, quando viene premuto il pulsante OK, inoltra a Google Play per l'acquisto.
Le cose funzionano perfettamente per la maggior parte delle volte, ma per pochi utenti si blocca builder.show()
e posso vedere " "android.view.WindowManager$BadTokenException:
Impossibile aggiungere la finestra" dal registro di arresto anomalo.
Il mio codice è più o meno così:
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();
}
}
}
}
Ho anche visto l'errore in un altro avviso in cui non sto inoltrando a nessun altro activity
. È semplice così:
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();
}
//send to some other activity
. Penso che se commenterai la parte in cui stai andando a una nuova attività, questo errore scomparirà. L'errore sembra accadere perché la tua finestra di dialogo prima viene completamente chiusa, la tua nuova attività inizia. In onPostExecute()
, hai la finestra di dialogo di avviso e stai fornendo il contesto login
dell'attività. Ma stai navigando verso l'altra attività, quindi il contesto diventa sbagliato. Quindi stai ricevendo questo errore! Vedi stackoverflow.com/questions/15104677/… domanda simile.