【问题标题】:BadTokenException even on Activity's ContextBadTokenException 甚至在 Activity 的上下文中
【发布时间】:2015-02-14 16:32:24
【问题描述】:

我已经按照建议使用 Activity 的上下文初始化了 progressDialog,但应用程序仍然经常因“BadTokenException 错误”而崩溃。

错误日志:

02-14 21:20:40.318: E/AndroidRuntime(17548): FATAL EXCEPTION: main 02-14 21:20:40.318: E/AndroidRuntime(17548): Process: com.xyz.abx.app, PID: 17548 02-14 21:20:40.318: E/AndroidRuntime(17548): android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@1494d8e8 is not valid; is your activity running? 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.view.ViewRootImpl.setView(ViewRootImpl.java:562) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:272) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.app.Dialog.show(Dialog.java:298) 02-14 21:20:40.318: E/AndroidRuntime(17548): at com.payumoney.appower.app.PaymentWebView$2.onPageStarted(PaymentWebView.java:86) 02-14 21:20:40.318: E/AndroidRuntime(17548): at com.android.webview.chromium.WebViewContentsClientAdapter.onPageStarted(WebViewContentsClientAdapter.java:484) 02-14 21:20:40.318: E/AndroidRuntime(17548): at com.android.org.chromium.android_webview.AwContentsClientCallbackHelper$MyHandler.handleMessage(AwContentsClientCallbackHelper.java:107) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.os.Handler.dispatchMessage(Handler.java:102) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.os.Looper.loop(Looper.java:135) 02-14 21:20:40.318: E/AndroidRuntime(17548): at android.app.ActivityThread.main(ActivityThread.java:5221) 02-14 21:20:40.318: E/AndroidRuntime(17548): at java.lang.reflect.Method.invoke(Native Method) 02-14 21:20:40.318: E/AndroidRuntime(17548): at java.lang.reflect.Method.invoke(Method.java:372) 02-14 21:20:40.318: E/AndroidRuntime(17548): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 02-14 21:20:40.318: E/AndroidRuntime(17548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

此处发生崩溃:

@Override
        public void onPageStarted(WebView view, String url, Bitmap favicon)
        {
            super.onPageStarted(view,url,favicon);
                if (!progress.isShowing()&PaymentWebView.class!=null)           {
                    progress.show();
                }
        }

并在 oncreate 中初始化:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_payment_web_view);

    progress = new ProgressDialog(this);
    progress.setMessage("Please wait");

    mWebview = (WebView)findViewById(R.id.paymentWebView);
    mWebview.getSettings().setJavaScriptEnabled(true);
    imm = (InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
    Bundle extras = getIntent().getExtras();
    mWebview.getSettings().setJavaScriptEnabled(true);
    mWebview.getSettings().setDomStorageEnabled(true);

`

我也使用了 Activity.this 和 getapplicationcontext 没有任何结果。请建议当上下文正常时,progressdialog 上的 badtokenexception 可能会导致什么崩溃。在此处输入代码

【问题讨论】:

标签: android


【解决方案1】:

感谢以下为我工作的人:

@Override
    public void onPageStarted(WebView view, String url, Bitmap favicon)
    {
        super.onPageStarted(view,url,favicon);
            if (!progress.isShowing()&PaymentWebView.class!=null&!isFinishing)           {
                progress.show();
            }
    }

if(!isFinishing) 条件阻止 .show() 执行,因为任何原因 Activity 的对象丢失了上下文。如果我发现当活动在前台并且用户正在与 webview 交互时上下文丢失的原因,我也会更新它。

最终结果:在某些页面上,在 webview 中进行导航时,进度对话框未显示。(我认为在此之前发生了崩溃)

见:Android : BadTokenException when I want to show a progresssDialog a second time

【讨论】:

    【解决方案2】:

    将对话逻辑移至 Activity 的 onResume 方法,当调用 onCreate 时,Activity 尚未运行,将导致 badtokenexception。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2016-12-24
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      相关资源
      最近更新 更多