必须在相同的线程错误上调用Android返回方法

时间:2015-04-20 13:07:59

标签: javascript android webview

我正在尝试从webview中由javascript调用的方法调用WebView方法。然后Webview应该返回方法中使用的值。

html事件 - > javascript - > jSinterface - > android方法< - >网页视图

显然Webview在ui线程中运行而js没有,并且必须从同一个线程调用webview的方法。此方法可用于从非ui线程调用方法:

webView.post(new Runnable() {
         public void run() {
            webView.loadUrl("javascript:" + s + ";");
        }
    });

但我也希望返回结果。例如return webView.getUrl()。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

正如您所说,当您从JS调用JavaBridge的方法,然后从非ui线程调用您的类时,您必须使用侦听器/回调。完成loadUrl后,调用您的侦听器传递所需的String url。

在本例中,我已经定义了一个带有onGetWebViewUrl侦听器的内部接口。我通过在同一个类中实现接口来注册监听器,因此我可以轻松地调用它。

例如:

public class WebViewProxy implement WebViewListener {

    private WebView mWebView;

    ...

    @JavascriptInterface
    public void onJsStuff(){
        webView.post(new Runnable() {
             public void run() {
                mWebView.loadUrl("javascript:" + s + ";");
                WebViewProxy.this.onGetWebViewUrl(mWebView.getUrl());
            }
        });
    }

    @Override
    public void onGetWebViewUrl(String url){
        // call method 2 with this url
    }

    public interface WebViewListener {

        void onGetWebViewUrl(String url);
    }
}