BadTokenException Невозможно добавить окно - PullRequest
3 голосов
/ 19 января 2012

Я опубликовал приложение в Android Market. Я тестировал в HTC и Samsung, работает нормально. Но сегодня я получил ошибку в своем приложении, указанном ниже.

android.view.WindowManager$BadTokenException
Source method 
ViewRoot.setView()

В трассировке стека,

android.view.WindowManager$BadTokenException: Unable to add window -- token
android.os.BinderProxy@4059be38 is not valid; is your activity running?
at android.view.ViewRoot.setView(ViewRoot.java:532)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:200)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114)
at android.view.Window$LocalWindowManager.addView(Window.java:424)
at android.app.Dialog.show(Dialog.java:241)
at android.app.AlertDialog$Builder.show(AlertDialog.java:810)
at com.newtglobal.android.Trace.serverBusy(Trace.java:1041)
at com.newtglobal.android.Trace.access$12(Trace.java:1013)
at com.newtglobal.android.Trace$13$1.run(Trace.java:975)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3687)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

Для приложений, включающих запутанный код, трассировки стека содержат имена запутанных символов. Если приложение было запутано с помощью ProGuard, вы можете разблокировать трассировку стека с помощью инструмента «retrace», включенного в Android SDK Tools r8 и новее. Для получения дополнительной информации см. Документ ProGuard.

В чем проблема. Как избавиться от этой ошибки ??? Но я тестировал в HTC и Samsung, работает нормально.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2012

У меня очень похожая проблема с моим приложением; По результатам некоторых исследований, похоже, что вы хотите убедиться, что вы используете Контекст деятельности при создании AlertDialog (а не Контекст приложения), а также хотите убедиться, что вы используете верхнюю родительскую активность (подробнее см. принят ответ на этот пост: https://stackoverflow.com/a/4011090/202870).

0 голосов
/ 12 апреля 2014

«BadTokenException Невозможно добавить окно» может встречаться в Android довольно часто.

Для многих представлений, таких как «всплывающее окно» или «диалоговое окно», для запуска требуется родительское представление / действие.Если в любом случае случается, что ваше родительское представление еще не было инициализировано, но вызывается зависимое от него представление, генерируется исключение BadTokenException.

Чтобы избежать этого, сначала необходимо убедиться, что родительское представлениеуже прикреплен к окну телефона.Для активности это можно сделать с помощью «onActivityAttached» или «onAttachedToWindow ()» и т. Д. Затем вызовите ваше дочернее представление, и оно должно работать нормально.

Если действие или родительское представление уже присоединено, используйте его собственный conext и НЕ getAppliationContext ().

Если оно находится в самом классе Activity, вы можете передать тот же объект (this / CLASS_NAME.this).

В вашем случае, я думаю, что при вызове setView не получается родительское представление.Или передайте контекст действия.

Как это поможет /

Happy Coding.:)

0 голосов
/ 07 мая 2013
@Override
public void onCreate(Bundle savedInstanceState) {
    // do all your other stuff here

    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            mProgressDialog = ProgressDialog.show(
               MyActvity.this.getApplicationContext(), "",
               MyActvity.this.getString(R.string.loading), true);

            // start time consuming background process here
        }
    }, 1000); // starting it in 1 second
}
...