我已根据建议使用Activity的上下文初始化了progressDialog,但仍有很多应用程序崩溃了#34; 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崩溃的内容。输入代码
答案 0 :(得分: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中导航的某些页面上没有显示progressdialog。(我认为之前发生了崩溃)
请参阅:Android : BadTokenException when I want to show a progresssDialog a second time
答案 1 :(得分:0)
将对话框逻辑移动到活动的onResume方法,当调用onCreate时,活动尚未运行,并且会导致错误的异常。
希望有所帮助。