У меня проблема с Webview. Я программирую собственный класс WebChromeClient, переопределяя метод onProgressChanged, потому что я хочу показать страницу, когда она заканчивает загрузку, а затем, чтобы скрыть заставку. Поскольку я просто хочу, чтобы это произошло с определенным URL-адресом, я сравниваю фактический URL WebView с определенной строкой, но есть проблема, я получаю нулевой указатель, когда вызывается метод webview.getUrl(), и мое приложение заканчивается. Это код:WebView.getUrl() возвращает null
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);
}
}
}
Я делаю это для избежать WebView занимает три или четыре секунды, чтобы отобразить страницу, но она не работает. Код, который я использовал до этого было:
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);
}
}
}
Благодаря
Спасибо за ответ. Я пробовал это, но когда я скрываю заставку, веб-просмотр остается пустым три или четыре секунды, пока страница не будет отображаться. Это я хочу исправить, и я не знаю, как этого избежать. Я отредактировал свой вопрос с кодом, который я использовал. – Adrian
Я обновил свой проект кода. Обратите внимание, что некоторые методы переопределения URL также вызывают для других элементов, таких как изображения, css. – Pentium10
Решение, которое вы мне дали, является хорошим, хотя существует некоторое мерцание, потому что есть некоторые перенаправления страниц, а onPageFinished вызывается два или три раза, поэтому веб-просмотр отображается, но OnLoadResource скрывает его до тех пор, пока не загрузится последняя страница. Как я уже сказал, решение работает очень хорошо, но я хотел бы исправить эту проблему. Спасибо за все. – Adrian