Fat*_*onk 3 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})
Run Code Online (Sandbox Code Playgroud)
我猜这是因为执行重新加载的onCreate方法不在此活动的方法内,该方法执行所有其他操作,WebView但我不确定这是否真的是问题以及如何解决它- 因为重新加载 URL 的方法需要在 JavascripInterface 类中才能从网页中访问。
WebView由于某种原因,需要在 UI 线程上加载组件中的页面(或重新加载),因此只需将重新加载调用包装起来即可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));
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2717 次 |
| 最近记录: |