Recebo a seguinte exceção do Android quando tento abrir uma caixa de diálogo. Alguém pode me ajudar a entender o que está acontecendo e como posso corrigir esse problema?
android.view.WindowManager$BadTokenException:
Unable to add window -- token null is not for an application
at android.view.ViewRoot.setView(ViewRoot.java:509)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
at android.app.Dialog.show(Dialog.java:241)
Respostas:
Eu estou supondo - você está tentando criar o Diálogo com um contexto de aplicativo? Algo assim:
Isto está errado. Você precisa usar um contexto de atividade.
Você tem que tentar como:
fonte
getActivity()
@SagarDevangaVocê pode continuar usando
getApplicationContext()
, mas antes do uso, adicione este sinalizador:dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
e o erro não será exibido.E não se esqueça de adicionar permissão:
fonte
No meu caso, eu estava tentando criar meu diálogo assim:
Então eu tive que mudar para:
E funciona bem para mim;)
fonte
MyActivity.class
vez dethis
porquethis
se refere a um objeto diferente.this
garantirá que vocêDialog
herda seu tema.Tente
getParent()
no lugar de discussão decontext
comonew AlertDialog.Builder(getParent());
Espero que funcione, funcionou para mim.fonte
this.parent.getActivity().getApplicationContext()
masthis.parent.getActivity()
fiz o truque.Eu estou supondo - você está tentando criar o Diálogo usando.
se Você exibir a classe de não atividade de diálogo, precisará passar a atividade como parâmetro.
Agora será um ótimo trabalho.
Se você encontrar algum problema, me avise.
fonte
Eu tentei com isso no campo de contexto:
e funciona bem para mim. Isto foi de uma classe que se estende de "Fragmento":
fonte
Olá, se você estiver usando o adaptador, pode haver uma chance.
Tudo o que você precisa saber quando você usou qualquer caixa de diálogo no adaptador, getContext (), contexto ou atividade não funcionará em algum momento.
Aqui está o truque que eu usei
v.getRootView().getContext()
onde v é o objeto de exibição que você está fazendo referência.Por exemplo.
fonte
Eu tenho a mesma exceção. o que faço para corrigir isso é passar a instância da caixa de diálogo como parâmetro para a função e usá-la em vez de passar apenas o contexto e usar getContext (). esta solução resolve meu problema, espero que ajude
fonte
Eu recebi essa exceção, quando tentei abrir o Progress Dialog no Cordova Plugin usando abaixo de dois casos,
novo ProgressDialog (this.cordova.getActivity (). getParent ());
novo ProgressDialog (this.cordova.getActivity (). getApplicationContext ());
Mais tarde mudou assim,
novo ProgressDialog (this.cordova.getActivity ());
Está funcionando bem para mim.
fonte
Use isso e o contexto não funcionou para mim .. mas MyActivityName.this funcionou. Espero que isso ajude quem precisa.
fonte
Resolvi esse erro adicionando abaixo a permissão do usuário no AndroidManifest.xml
Além disso, inicialize o diálogo Alerta com Nome da Atividade:
Para mais detalhes, visite ==> Como criar uma caixa de diálogo de alerta no Android
fonte