使用来自加载的网页的JavaScript调用重新加载WebView

时间:2016-01-24 17:27:26

标签: javascript java android android-webview

我在一个加载特定网页的应用中有一个WebView

在该网页上是一个按钮,它使用JavaScript调用Android活动中的方法来重新加载WebView中的URL(有效地将Web应用程序重置为其默认状态)。

我已经获得了Android位的所有JavaScript界面​​,感谢这里的几个线程,我可以弹出一个Toast来显示应用程序即将重新加载,但我'我在WebView.loadUrl()调用时收到错误,如下所示。

java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 1) {1d015c84} called on Looper (JavaBridge, tid 122148) {33703881}, FYI main Looper is Looper (main, tid 1) {1d015c84})

我猜测这是因为正在执行重新加载的方法不在此活动的onCreate方法范围内,该方法执行所有其他WebView内容,但是我这样做了。我不确定这是否真的是问题以及如何解决问题 - 因为重新加载URL的方法需要在JavascripInterface类中从Web页面内可以访问。

1 个答案:

答案 0 :(得分:4)

由于某种原因,需要在UI线程上加载WebView组件(或重新加载)中的页面,因此只需在runOnUiThread中包装重新加载调用即可解决此问题。

    @JavascriptInterface
    public void reloadSite(){
        Toast.makeText(mContext, getString(R.string.reloadingWebApp), Toast.LENGTH_LONG).show();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mWebView = (WebView) findViewById(R.id.activity_main_webview);
                mWebView.loadUrl(getString(R.string.web_app_url));
            }
        });
    }