WebView.getUrl () возвращает ноль - PullRequest
3 голосов
/ 05 июля 2010

У меня проблема с Webview. Я программирую свой собственный класс WebChromeClient, переопределяющий метод onProgressChanged, потому что я хочу показать страницу, когда она заканчивает загрузку, а затем скрыть заставку. Поскольку я просто хочу, чтобы это происходило с определенным URL-адресом, я сравниваю фактический URL-адрес WebView с конкретной строкой, но есть проблема, я получаю нулевой указатель, когда вызывается метод webview.getUrl () и мое приложение завершается. Это код:

private class MyWebChromeClient extends WebChromeClient {
    @Override
    public void onProgressChanged (WebView webview, int newProgress) {
        super.onProgressChanged(webview,newProgress);
        if(webview.equals(w1) && newProgress == 100 && webview.getUrl().startsWith("https://ssl.facebook.com/login.php")) { 
            webview.setVisibility(WebView.VISIBLE);
            ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
            imageview.setVisibility(ImageView.GONE);
            ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
            progressbar.setVisibility(ProgressBar.GONE);
        }
    }
}

Я делаю это, чтобы веб-просмотр не отображал страницы три-четыре секунды, но он не работает. Код, который я использовал раньше, был:

private class MyWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView webview, String url) {
        super.shouldOverrideUrlLoading(webview, url);
        webview.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView webview, String url) {
        if(url.startsWith("https://ssl.facebook.com/login.php")) {
            webview.setVisibility(WebView.VISIBLE);
            ImageView imageview = (ImageView)findViewById(R.id.ivsplash);
            imageview.setVisibility(ImageView.GONE);
            ProgressBar progressbar = (ProgressBar)findViewById(R.id.pbsplash);
            progressbar.setVisibility(ProgressBar.GONE);
        }
    }
}

Спасибо

1 Ответ

2 голосов
/ 05 июля 2010

Не уверен, возможно ли это с WebChromeClient, но я смог сделать это с помощью

WebViewClient и перегрузка onLoadResource, onReceivedError и onPageFinished

Это то, что я сделал

onLoadResource     
 mwebview.setVisibility(View.GONE);


onReceivedError
mwebview.setVisibility(View.VISIBLE);

onPageFinished
mwebview.setVisibility(View.VISIBLE);

и изначально в XML веб-представление установлено как GONE

android:visibility="gone"

Я тоже использую его для Facebook и отлично работает.

...