我在一个加载特定网页的应用中有一个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页面内可以访问。
答案 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));
}
});
}