同一線程錯誤上的 WebView 方法 - WebView methods on same thread error

問題:

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..");
    }

解決方案:

參考: https://stackoom.com/en/question/1WrHd
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章