Android 利用webview开发webApp和本地交互出现的一个问题
问题是:
A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same
我英语不好看不太懂,大致的了解了下原因。
之前我的代码是这样。
1 @JavascriptInterface 2 public void needLogin(String username,String password) { 3 if (username.equals("abc")&&password.equals("123")){ 4 Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); 5 webView.loadUrl("file:///android_res/raw/test1.html"); 6 }else { 7 Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show(); 8 } 9 }
运行就错了,就是在webView重新loadUrl的时候出现了问题。
然后我这样改了下,就ok了,
1 @JavascriptInterface 2 public void needLogin(String username,String password) { 3 if (username.equals("abc")&&password.equals("123")){ 4 Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show(); 5 webView.post(new Runnable() { 6 @Override 7 public void run() { 8 webView.loadUrl("file:///android_res/raw/test1.html"); 9 } 10 }); 11 12 }else { 13 Toast.makeText(MainActivity.this,"登录失败",Toast.LENGTH_SHORT).show(); 14 } 15 }
我想大家肯定猜到了什么了。webView会checkThread,导致不行,因为在js调用后的Java回调线程并不是主线程。