2010-07-05 6 views
3

J'ai un problème avec Webview. Je suis en train de programmer ma propre classe WebChromeClient en remplaçant la méthode onProgressChanged, car je veux afficher la page quand le chargement est terminé et ensuite, pour masquer l'écran de démarrage. Comme je veux juste que cela arrive avec une URL spécifique, je compare l'URL WebView réelle avec une chaîne spécifique, mais il y a un problème, j'obtiens un pointeur nul quand la méthode webview.getUrl() est appelée et mon application se termine. Voici le code:WebView.getUrl() renvoie la valeur 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); 
     } 
    } 
} 

Je fais cela pour éviter la WebView prend trois ou quatre secondes pour rendre la page, mais cela ne fonctionne pas. Le code je avant était:

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); 
     } 
    } 
} 

Merci

Répondre

2

Je ne sais pas si cela est possible avec WebChromeClient, mais j'ai pu le faire en utilisant

WebViewClient et la surcharge onLoadResource, onReceivedError et onPageFinished

C'est ce que j'ai fait

onLoadResource  
mwebview.setVisibility(View.GONE); 


onReceivedError 
mwebview.setVisibility(View.VISIBLE); 

onPageFinished 
mwebview.setVisibility(View.VISIBLE); 

et intially en XML WebView est défini comme GONE

android:visibility="gone" 

Je l'utilise aussi pour Facebook et fonctionne très bien.

+0

Merci pour la réponse. Je l'ai essayé, mais lorsque je masque l'écran de démarrage, la vue Web reste vide trois ou quatre secondes jusqu'à ce que la page soit rendue. C'est ce que je veux réparer et je ne sais pas comment éviter cela. J'ai modifié ma question avec le code que j'ai utilisé. – Adrian

+0

J'ai mis à jour mon code de projet. Veuillez noter que certaines méthodes de remplacement d'url sont également appelées pour d'autres éléments comme les images, css. – Pentium10

+0

La solution que vous m'avez donnée est bonne bien qu'il existe quelques scintillements car il y a des redirections de page et onPageFinished est appelé deux ou trois fois, donc le webview est affiché mais OnLoadResource le cache à nouveau jusqu'à ce que la dernière page soit chargée. Comme je l'ai dit, la solution fonctionne très bien, mais j'aimerais régler ce problème. Merci pour tous. – Adrian

Questions connexes