Gdy próbuję otworzyć okno dialogowe, pojawia się następujący wyjątek Androida. Czy ktoś może mi pomóc zrozumieć, co się dzieje i jak mogę rozwiązać ten problem?
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)
Odpowiedzi:
Zgaduję - czy próbujesz stworzyć Dialog z kontekstem aplikacji? Coś takiego:
To jest źle. Musisz użyć kontekstu działania.
Musisz spróbować:
źródło
getActivity()
@SagarDevangaMożesz nadal używać
getApplicationContext()
, ale przed użyciem powinieneś dodać tę flagę:,dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
a błąd się nie pojawi.I nie zapomnij dodać uprawnień:
źródło
W moim przypadku próbowałem stworzyć moje okno dialogowe w następujący sposób:
Więc musiałem się zmienić na:
I u mnie działa dobrze;)
źródło
MyActivity.class
argumentu,this
ponieważthis
odnosi się do innego obiektu.this
upewni się, żeDialog
Twój motyw odziedziczy.Spróbuj
getParent()
w miejscu kłótni,context
takim jaknew AlertDialog.Builder(getParent());
Mam nadzieję, że zadziała, zadziałało dla mnie.źródło
this.parent.getActivity().getApplicationContext()
alethis.parent.getActivity()
załatwiłem sprawę.Zgaduję - czy próbujesz stworzyć Dialog za pomocą.
jeśli wyświetlasz klasę braku aktywności okna dialogowego, musisz przekazać aktywność jako parametr.
Teraz będzie działać świetnie.
Jeśli znajdziesz jakieś kłopoty, daj mi znać.
źródło
Próbowałem z tym w polu kontekstowym:
i dla mnie działa dobrze. To pochodzi z klasy, która wykracza poza „Fragment”:
źródło
Witam, jeśli używasz adaptera, może być szansa.
Wszystko, co musisz wiedzieć, kiedy używałeś dowolnego okna dialogowego w adapterze, getContext (), kontekstu lub aktywności czasami nie zadziała.
Oto sztuczka,
v.getRootView().getContext()
której użyłem, gdzie v jest obiektem widoku, do którego się odnosisz.Na przykład.
źródło
Mam ten sam wyjątek. co robię, aby to naprawić, to przekazanie wystąpienia okna dialogowego jako parametru do funkcji i użycie go zamiast przekazywania tylko kontekstu, a następnie użycie metody getContext (). To rozwiązanie rozwiązuje mój problem, mam nadzieję, że może pomóc
źródło
Mam ten wyjątek, kiedy próbowałem otworzyć okno postępu w ramach wtyczki Cordova, używając poniższych dwóch przypadków,
new ProgressDialog (this.cordova.getActivity (). getParent ());
new ProgressDialog (this.cordova.getActivity (). getApplicationContext ());
Później tak się zmieniło,
new ProgressDialog (this.cordova.getActivity ());
Dla mnie działa dobrze.
źródło
Użyj tego i kontekst nie zadziałał dla mnie, ale MyActivityName. To zadziałało. Mam nadzieję, że to pomoże każdemu, kto tego potrzebuje.
źródło
Rozwiązałem ten błąd, dodając poniżej uprawnienia użytkownika w AndroidManifest.xml
Ponadto okno dialogowe Zainicjuj alert z nazwą działania:
Aby uzyskać więcej informacji, odwiedź ==> Jak utworzyć okno dialogowe alertów w systemie Android
źródło