什么属于项目类的BadTokenException

时间:2017-11-29 08:36:25

标签: android android-studio

我正在尝试在API 25中运行我的应用程序但是当我点击按钮时出现此错误:

E/ACRA: ACRA caught a BadTokenException for com.safa.visit.ts.debug
    android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@2fc535e is not valid; is your activity running?
        at android.view.ViewRootImpl.setView(ViewRootImpl.java:922)
        at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:377)
        at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:105)
        at android.widget.Toast$TN.handleShow(Toast.java:747)
        at android.widget.Toast$TN$2.handleMessage(Toast.java:622)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6823)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1563)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1451)
Disconnected from the target VM, address: 'localhost:8600', transport: 'socket'

我已经搜索过,我发现这个问题适用于Toast。因为toast上下文可能是NULL。为此我在显示上下文之前检查了上下文。这是我的方法:

    private void toastError(Context ctx,final String msg) {
    if (ctx != null)
    Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
}

我的问题是,我不知道这个错误是针对哪个页面或类,因为那个地方,我点击了按钮并出现了这个错误,我把我的方法放在那里并使用了我的方法而不是Toast但是我还是得到了这个错误。

你能建议我什么?

2 个答案:

答案 0 :(得分:6)

我已经为挂钩修复创建了一个库BadTokenException

https://github.com/drakeet/ToastCompat

只需使用:

ToastCompat.makeText(context, "hello world!", Toast.LENGTH_SHORT).show();

BadTokenListener#onBadTokenCaught(@NonNull Toast toast)

ToastCompat.makeText(this, "hello", Toast.LENGTH_SHORT)
    .setBadTokenListener(toast -> {
        ...
    }).show();

为什么 例外:https://github.com/drakeet/ToastCompat#why

答案 1 :(得分:2)

尝试:

if(!((Activity) context).isFinishing())
{
     Toast.makeText(ctx, msg, Toast.LENGTH_SHORT).show();
}