错误代码
FATAL EXCEPTION: JavaBridge
Process: violetjack.smartinfusion, PID: 31227
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) {4186a978} called on Looper (JavaBridge, tid 385) {41a24830}, FYI main Looper is Looper (main, tid 1) {4186a978})
at android.webkit.WebView.checkThread(WebView.java:2082)
at android.webkit.WebView.loadUrl(WebView.java:803)
...
错误原因
由于我在webview加载页面时是这么写的
private void callChangeStartTime(final String time){
String call = "javascript:changeStartTime(\"" + time + "\")";
wvContent.loadUrl(call);
}
一开始在4.2的机器上没有这个问题,到4.4的机器上就出了这个问题。
解决方案
在Stackoverflow上找到了正解http://stackoverflow.com/questions/22607657/webview-methods-on-same-thread-error
runOnUiThread(new Runnable() {
@Override
public void run() {
final WebView webView = (WebView) findViewById(R.id.map);
webView.loadDataWithBaseURL(...);
}
});
就是将webview的loadUrl
方法写在runOnUiThread
中即可解决问题。就如我做的那样~
private void callChangeStartTime(final String time){
runOnUiThread(new Runnable() {
@Override
public void run() {
String call = "javascript:changeStartTime(\"" + time + "\")";
wvContent.loadUrl(call);
}
});
}