Desde mi main activity
, necesito llamar a una clase interna y en un método dentro de la clase, necesito mostrar AlertDialog
. Después de descartarlo, cuando se presione el botón OK, reenvíe a Google Play para la compra.
Las cosas funcionan perfectamente la mayoría de las veces, pero para algunos usuarios se bloquea builder.show()
y puedo ver " "android.view.WindowManager$BadTokenException:
No se puede agregar la ventana" desde el registro de fallas. Sugiera.
Mi código es bastante parecido a esto:
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();
}
}
}
}
También he visto el error en otra alerta en la que no estoy reenviando a ninguna otra activity
. Es tan simple como esto:
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
fuente
fuente
//send to some other activity
. Creo que si comentas la parte en la que vas a una nueva actividad, este error desaparecerá. El error parece suceder porque su cuadro de diálogo anterior se descarta por completo y comienza su nueva actividad. EnonPostExecute()
, tiene el diálogo de alerta y está dando el contexto de lalogin
Actividad. Pero está navegando a la otra actividad, por lo que el contexto se vuelve incorrecto. ¡Por lo tanto, está recibiendo este error! Consulte stackoverflow.com/questions/15104677/… una pregunta similar.Respuestas:
Problema:
Razón:
Solución:
ej .
Actualización:
Fichas de ventana:
Un escenario del mundo real:
fuente
Tenía un diálogo que muestra la función:
Recibía este error y solo tenía que verificar
isFinishing()
antes de llamar a este cuadro de diálogo que muestra la función.fuente
if(!MyActivity.this.isFinishing())
? Si no está bien en MyActivityLa posible razón es el contexto del diálogo de alerta. Es posible que haya terminado esa actividad, por lo que está tratando de abrirse en ese contexto pero que ya está cerrado. Intente cambiar el contexto de ese diálogo a su primera actividad porque no estará terminado hasta el final.
p.ej
En vez de esto.
tratar de usar
fuente
segundo intente crear AlterDailog desde el constructor y luego llame a show ().
fuente
Estoy creando Diálogo
onCreate
y utilizándolo conshow
yhide
. Para mí la causa raíz no fue despedironBackPressed
, que fue terminar laHome
actividad.Estaba terminando la actividad de inicio
onBackPressed
sin cerrar / descartar mis diálogos.Cuando descarté mis diálogos, el bloqueo desapareció.
fuente
Intento esto resuelto.
fuente
Prueba esto :
fuente
con esta idea de variables globales, guardé la instancia de MainActivity en onCreate (); Variable global de Android
y abrir un diálogo como este. funcionó.
y en un hilo, abro un diálogo como este.
:)
fuente