問題:
I have a android program (Java + html in a webview).我有一個 android 程序(webview 中的 Java + html)。 I can call from the javascript to the Java code.我可以從 javascript 調用 Java 代碼。 But the other way around stopped working (after updating in eclipse).但相反的方式停止工作(在 eclipse 中更新後)。
So this is what I'm trying to do所以這就是我想要做的
- Make a webview (worked)製作一個網頁視圖(工作)
- calling in javascript to AndroidFunction.test();在 javascript 中調用 AndroidFunction.test(); (worked) (工作)
- the java test() function call webView.loadUrl("javascript:helloBack()"); java test() 函數調用 webView.loadUrl("javascript:helloBack()"); (! not working anymore) (!不再工作了)
I tried to let it work with the WebView in the MainActivity, but it didnt work.我試圖讓它與 MainActivity 中的 WebView 一起工作,但它沒有工作。
MainActivity.java主活動.java
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final WebView webView = (WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
javascr = new Javascript(this, webView);
webView.addJavascriptInterface(javascr, "AndroidFunction");
webView.loadUrl("file:///android_asset/www/index.html");
....
}
Javascript.java Javascript.java
public class Javascript {
Context cont;
WebView webView;
Javascript(Context c, WebView w) {
cont = c;
webView = w;
}
// function called in the javascript by AndroidFunction.test();
public void test() {
// Breaking point!!!
webView.loadUrl("javascript:helloBack()");
}
Error:錯誤:
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
03-24 11:47:50.103: W/WebView(21026): java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread. (Expected Looper Looper{41ab68f8} called on Looper{41bb70a8}, FYI main Looper is Looper{41ab68f8})
03-24 11:47:50.103: W/WebView(21026): at android.webkit.WebView.checkThread(WebView.java:2063)
03-24 11:47:50.103: W/WebView(21026): at android.webkit.WebView.loadUrl(WebView.java:794)
03-24 11:47:50.103: W/WebView(21026): at com.example.hellobt.Javascript.test(Javascript.java:24)
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
03-24 11:47:50.103: W/WebView(21026): at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:27)
03-24 11:47:50.103: W/WebView(21026): at android.os.Handler.dispatchMessage(Handler.java:102)
03-24 11:47:50.103: W/WebView(21026): at android.os.Looper.loop(Looper.java:137)
03-24 11:47:50.103: W/WebView(21026): at android.os.HandlerThread.run(HandlerThread.java:61)
Thanks for the answer.謝謝你的回答。 I edited the function in my Javascript file like this:我在我的 Javascript 文件中編輯了這個函數,如下所示:
private void test(final String s) {
webView.post(new Runnable() {
public void run() {
webView.loadUrl("javascript:" + s + ";");
}
});
System.out.println("javscript done..");
}