2010-07-05 1 views
3

У меня проблема с 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); 
     } 
    } 
} 

Благодаря

ответ

2

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

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

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

onLoadResource  
mwebview.setVisibility(View.GONE); 


onReceivedError 
mwebview.setVisibility(View.VISIBLE); 

onPageFinished 
mwebview.setVisibility(View.VISIBLE); 

и intially в XML-WebView устанавливается как GONE

android:visibility="gone" 

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

+0

Спасибо за ответ. Я пробовал это, но когда я скрываю заставку, веб-просмотр остается пустым три или четыре секунды, пока страница не будет отображаться. Это я хочу исправить, и я не знаю, как этого избежать. Я отредактировал свой вопрос с кодом, который я использовал. – Adrian

+0

Я обновил свой проект кода. Обратите внимание, что некоторые методы переопределения URL также вызывают для других элементов, таких как изображения, css. – Pentium10

+0

Решение, которое вы мне дали, является хорошим, хотя существует некоторое мерцание, потому что есть некоторые перенаправления страниц, а onPageFinished вызывается два или три раза, поэтому веб-просмотр отображается, но OnLoadResource скрывает его до тех пор, пока не загрузится последняя страница. Как я уже сказал, решение работает очень хорошо, но я хотел бы исправить эту проблему. Спасибо за все. – Adrian

 Смежные вопросы

  • Нет связанных вопросов^_^