解雇并再次单击后如何解决对话框中的错误?

时间:2019-01-31 07:29:55

标签: java android xml android-webview

我正在开发 webview 应用, OnJsAlert 中的问题是,当我单击对话框时,它会在关闭后打开< / strong>,然后再次单击它停止我的应用,抱歉,我无法通过调试解决问题。

这是我的 MainActivity.class

@Override
public boolean onJsAlert(WebView view, String url, final String alertSource, final JsResult alertResult) {

    alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

    alertDialog.setContentView(R.layout.activity_alert);

    alertDialog.setCancelable(true);

    TextView alertMessage = alertDialog.findViewById(R.id.alert_text);

    alertMessage.setText(alertSource);

    alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

    alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {

        @Override
        public void onCancel(DialogInterface dialog) {

            alertResult.cancel();

        }


    });

    alertDialog.show();

    return true;

}

已编辑:日志

  

W / InputEventReceiver:试图完成一个输入事件,但已经处理了输入事件接收器。   E / ViewRootImpl:sendUserActionEvent()mView == null   W / System.err:android.util.AndroidRuntimeException:在添加内容之前必须调用requestFeature()   W / System.err:位于com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:331)           在android.app.Dialog.requestWindowFeature(Dialog.java:1057)           在com.xcoder.stepview.MainActivity $ 4.onJsAlert(MainActivity.java:285)           在com.android.webview.chromium.WebViewContentsClientAdapter.handleJsAlert(WebViewContentsClientAdapter.java:606)           在com.android.org.chromium.android_webview.AwContentsClientBridge.handleJsAlert(AwContentsClientBridge.java:73)           在com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(本机方法)           在com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)           在android.os.Handler.dispatchMessage(Handler.java:102)           在android.os.Looper.loop(Looper.java:146)           在android.app.ActivityThread.main(ActivityThread.java:5641)           在java.lang.reflect.Method.invokeNative(本机方法)           在java.lang.reflect.Method.invoke(Method.java:515)   W / System.err:位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1288)           在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1104)           在dalvik.system.NativeStart.main(本机方法)   A / libc:致命信号6(SIGABRT)位于0x00002c6d(代码= -6),线程11373(xcoder.stepview)   应用已终止。

1 个答案:

答案 0 :(得分:1)

您的alertDialog是在调用public boolean onJsAlert(...)方法之前创建的,当您第二次调用该方法时,由于您无法在创建的对话框中使用AndroidRuntimeException: requestFeature() must be called before adding content,因此得到了requestWindowFeature()。您必须使用此方法创建对话框的新实例或重新使用全局定义的对话框。