android.view.WindowsManager$BadTokenException

android.view.WindowsManager$BadTokenException: Unable to add window — token null is not for an application: questo errore mi e’ capitato mentre, programmando per Android 1.6, stavo provando a creare dei custom dialog seguendo la documentazione ufficiale di Google.

Per risolvere il problema, ahime’, bisogna sostituire nel codice mostrato questa chiamata

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);

con questo

Dialog dialog = new Dialog(this);

stessa cosa per l’esempio successivo, che usa un AlertDialog.Builder per creare un dialog completamente personalizzato, anche nel titolo, dove occorre sostituire la chiamata

builder = new AlertDialog.Builder(mContext);

con

builder = new AlertDialog.Builder(this);

In pratica, usare il metodo getApplicationContext() non ritorna un oggetto Context che puo’ essere usato per costruire i Dialog, quindi occorre passare direttamente tutta l’Activity.

Come mai non basti il Context restituito dal metodo, come mai la documentazione di Google non sia stata aggiornata per un problema cosi’ macroscopico, in quali altri punti si potrebbe nascondere un’insidia del genere, non e’ dato a saperlo! Che la documentazione che ci sia in giro per Android sia ancora molto frammentaria e a volte imprecisa, dati i frequenti cambi di API e bug nella varie versioni, non e’ invece un mistero per nessuno.

Leave a Reply