Estoy tratando de abrir una ventana de diálogo, pero cada vez que intento abrirla arroja esta excepción:
Uncaught handler: thread main exiting due to uncaught exception
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:460)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:238)
at android.app.Activity.showDialog(Activity.java:2413)
Lo estoy creando llamando showDialogcon la identificación de la pantalla. El onCreateDialogcontrolador se registra bien y puedo recorrerlo sin problemas, pero lo adjunto ya que parece que me falta algo:
@Override
public Dialog onCreateDialog(int id)
{
Dialog dialog;
Context appContext = this.getApplicationContext();
switch(id)
{
case RENAME_DIALOG_ID:
Log.i("Edit", "Creating rename dialog...");
dialog = new Dialog(appContext);
dialog.setContentView(R.layout.rename);
dialog.setTitle("Rename " + noteName);
break;
default:
dialog = null;
break;
}
return dialog;
}
¿Hay algo que falta en esto? Algunas preguntas han hablado acerca de tener este problema al crear un cuadro de diálogo onCreate, lo que ocurre porque la actividad aún no se ha creado, pero esto proviene de una llamada de un objeto de menú y appContextparece que la variable se rellena correctamente en el depurador.

No puede mostrar una ventana / diálogo de aplicación a través de un Contexto que no es una Actividad. Intenta pasar una referencia de actividad válida
fuente
activity.thisyactivity.getBaseContext()no sirvió de nada. ¿Alguna ayuda?.this.Lo mismo ocurre con el tema getApplicationContext.
Los documentos en el sitio de Android dicen que lo use, pero no funciona ... grrrrr :-P
Solo haz:
"esto" suele ser su actividad desde la que inicia el diálogo.
fuente
Los documentos de Android sugieren usar getApplicationContext ();
pero no funcionará en lugar de usar su actividad actual al crear instancias de AlertDialog.Builder o AlertDialog o Dialog ...
Ex:
o
fuente
En lugar de
getApplicationContext(), solo useActivityName.thisfuente
Tuve un problema similar donde tuve otra clase algo como esto:
Funcionó bien la mayor parte del tiempo, pero a veces fallaba con el mismo error. Entonces me doy cuenta de que
MyActivitytenía ...Debido a que estaba sosteniendo el objeto como
static, una segunda ejecución del código todavía contenía la versión original del objeto y, por lo tanto, todavía se refería al originalActivity, que ya no existía.Error tonto y estúpido, especialmente porque realmente no necesitaba estar sosteniendo el objeto como
staticen primer lugar ...fuente
Solo cámbielo a
En vez de
fuente
Otra solución es establecer el tipo de ventana en un cuadro de diálogo del sistema:
Esto requiere el
SYSTEM_ALERT_WINDOWpermiso:Como dicen los documentos:
Esta es una solución que solo debe usar si necesita un cuadro de diálogo que no esté asociado a una actividad.
fuente
No lo use
getApplicationContext()para declarar dialougeSiempre use
thiso suactivity.thisfuente
Para los diálogos anidados, este problema es muy común, funciona cuando
se usa en lugar de
Esta alternativa.
fuente
Esto funcionó para mí
Utilizar
fuente
También puedes hacer esto
¡Esto funcionó para mí!
fuente
Como se dice, necesita una Actividad como contexto para el diálogo, use "YourActivity.this" para un contexto estático o verifique aquí cómo usar uno dinámico en un modo seguro
fuente
Intenta restablecer
dialogel tipo de ventana aNo olvides usar el permiso
android.permission.SYSTEM_ALERT_WINDOWfuente
Texto aquí:
use esto para obtener
activitycontexto paraprogressdialogo
progressdialog = new ProgressDialog(this);use esto para obtener el contexto de la aplicación para
BroadcastListenerno paraprogressdialog.fuente
La mejor y más segura forma de mostrar un 'ProgressDialog' en una AsyncTask, evitando problemas de pérdida de memoria es usar un 'Handler' con Looper.main ().
luego en 'onCreate'
Ahora ha terminado con la parte de configuración. Ahora llame a 'showProgress ()' y 'hideProgress ()' en AsyncTask.
fuente