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 logindell'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.