关于吐司和活动更改的WindowManager $ BadTokenException

时间:2019-01-11 12:29:38

标签: android exception android-intent android-activity android-toast

我正在为我的utils文件中已处理的项目进行祝酒。

我面临的情况是,如果我扫描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"));

在UtilityMethods中

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 :(得分:0)

您仅使用this指向您的活动。确保this是指您的活动上下文,而不是其他任何内容,因为Toast需要活动上下文中的信息。使用活动上下文时,请尝试使用全名引用您的活动,请尝试使用以下代码。

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