WindowManager $ BadTokenException при тосте и изменении активности - PullRequest
0 голосов
/ 11 января 2019

Я показываю тост за уже обработанные элементы из моего файла утилит.

Сценарий, с которым я столкнулся, заключается в том, что, если я сканирую 10 элементов и меняю экран, тосты все еще находятся в процессе, и мое приложение вылетает с

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@321daf0 is not valid; is your activity running?

Ниже приведен код, который я использую.

В действии

UtilityMethods.showToast(ActivityName.this, "message"));

В служебных методах

public static void showToast(Context c, String s) {
    Toast.makeText(c, s, Toast.LENGTH_SHORT).show();
}

Что я пробовал

Я попытался добавить блок try catch следующим образом:

public static void showToast(Context c, String s) {
    try {
        Toast.makeText(c, s, Toast.LENGTH_SHORT).show();
    }
    catch (WindowManager.BadTokenException e){
        e.printStackTrace();
    }
}

Но он все еще падает.

Полное исключение ниже:

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@321daf0 is not valid; is your activity running?
   at android.view.ViewRootImpl.setView(ViewRootImpl.java:720)
   at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
   at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:94)
   at android.widget.Toast$TN.handleShow(Toast.java:459)
   at android.widget.Toast$TN$2.handleMessage(Toast.java:342)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6123)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

Я также нашел некоторые другие решения для SO, но они не работали.

Подскажите, пожалуйста, что можно сделать в моем случае, заранее спасибо.

1 Ответ

0 голосов
/ 11 января 2019

Вы используете только this, чтобы указать на свою деятельность. Убедитесь, что this относится к контексту вашей активности, а не ко всему прочему, так как Toast требуется информация из контекста действия. Попробуйте указать свою деятельность с полным именем, когда вы используете ее контекст. Попробуйте использовать приведенный ниже код.

UtilityMethods.showToast(YourActivityName.this, "message"));
...