来自另一个线程的WebView getUrl()

时间:2014-02-27 21:42:38

标签: java android multithreading webview

这是我的第一个将WebView用于我的网页的应用程序。

我想知道如何从webview获取当前网址,我正在使用它:

        SessionDetector session = new SessionDetector(this);

    webView = (WebView) findViewById(R.id.content);
    webView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    });
    webView.getSettings().setJavaScriptEnabled(true);
    webView.getSettings().setBuiltInZoomControls(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.loadUrl(AppWebViewUrls.getBaseUrl());

    session.start();

此类用于获取当前网址:

class SessionDetector extends Thread {
private boolean isLogged = false;
private MainActivity context;

SessionDetector(MainActivity context) {
    this.context = context;
}

@Override
public void run() {
    while (!isLogged) {
        if (context.webView.getUrl().contains("cpanel")) {
            isLogged = true;
        }
    }

    context.createMenu();
}

}

但是,Android会抛出一个异常,并显示“必须在同一个线程上调用所有webview方法”。

我很高兴知道这个错误的原因是什么以及为什么。

1 个答案:

答案 0 :(得分:0)

我发现shouldOverrideUrlLoading方法适用于我的情况。

            @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            super.shouldOverrideUrlLoading(view, url);

            if(url.contains("cpanel")) {
                createMenu();
            }               

            return true;
        }