Android: Comment vérifier pour la réussite de la charge de l'url lors de l'utilisation de webview.loadUrl
Dans webview android, je suis en train de charger une url et afin de vérifier si la charge de cette url est fait avec succès (une connexion internet est disponible, le serveur est up, etc) j'ai eu l'impression que webview.loadUrl permettrait de lancer des exceptions, mais faux! comme il est expressément indiqué dans ici "une exception ne sera PAS levée".
Alors, comment puis-je vérifier pour voir si webview.loadUrl n'a pas manqué ?
Pouvez-vous s'il vous plaît marquer la réponse comme acceptée si elle a aidé à résoudre votre problème. Merci
Assurez-vous, veuillez me donner le temps de le tester
Assurez-vous, veuillez me donner le temps de le tester
OriginalL'auteur C graphics | 2015-02-07
Vous devez vous connecter pour publier un commentaire.
Malheureusement, actuellement, il n'existe pas de moyen facile de WebView pour s'assurer que tout sur la page a été chargé avec succès. Nous espérons pour le mieux API pour venir dans une future version. Laissez-moi vous expliquer ce que vous pouvez faire maintenant.
Tout d'abord, afin de détecter d'éventuels problèmes qui empêchent les WebView à partir d'une connexion à un serveur pour le chargement de votre page principale (par exemple, nom de domaine défectueux, erreur d'e/S, etc.), vous devez utiliser
WebViewClient.onReceivedError
rappel que les autres personnes correctement suggèrent:Si la connexion au serveur a été un succès, et la page principale a été récupérée et analysée, vous recevrez
WebView.onPageFinished
de rappel, de sorte que vous devez aussi avoir ceci dans votreWebViewClient
sous-classe:L'inconvénient ici est que si vous avez reçu une erreur HTTP du serveur (par exemple, une erreur 404 ou une erreur 500), ce callback sera appelé de toute façon, c'est juste le contenu que vous obtiendrez dans votre WebView sera une page d'erreur de serveur. Les gens suggèrent des façons différentes de la façon de traiter avec elle, de voir les réponses ici: Comment puis-je vérifier à partir d'Android WebView si une page "404 page not found"? Fondamentalement, cela dépend vraiment de ce que vous vous attendez à être une "bonne page" et une "erreur" de la page. Malheureusement, il n'existe actuellement aucun moyen de l'application pour obtenir le code de réponse HTTP à partir de WebView.
Les rappels
WebViewClient.onPageStarted
etWebViewClient.onProgressChanged
ne sont utiles que si vous voulez dessiner une barre de progression comme vous le chargement de la page.Également noter que le moyen de passer outre la
WebViewClient.shouldOverrideUrlLoading
que d'habitude les gens proposez n'est pas correct:Ce que peu de développeurs de comprendre, c'est que la fonction de rappel est appelée aussi pour les sous-images avec des non-https régimes. Si vous rencontrez quelque chose comme
<iframe src='tel:1234'>
, vous aurez l'exécution deview.loadUrl('tel:1234')
et votre application affiche une page d'erreur, depuis WebView ne sais pas comment faire pour charger untel:
URL.Il est recommandé de simplement retourner false partir de la méthode, si vous voulez WebView pour faire le chargement:
Cela ne signifie pas que vous ne devez pas appeler
WebView.loadUrl
deshouldOverrideUrlLoading
à tous. Le modèle à éviter, c'est de le faire sans condition de toutes les Url.onRecievedError()
vous pouvez vérifier si l'échec d'une url correspond à l'url d'origine que vous avez chargé dans la WebView et de savoir si le document ne s'ouvre pas.Bien sûr! La même chose vaut pour
onPageFinished
et autres rappels.onReceivedError n'est pas appelée. Cible API de niveau < 23, donc je ne peux pas utiliser la non-déconseillé version.
Il n'y a pas de problème à utiliser l'ancienne version de l'API si votre application s'attend à fonctionner sur des versions plus anciennes.
OriginalL'auteur Mikhail Naganov
et ensuite vous pouvez faire
Pour l'erreur de section, vous pouvez remplacer la
onReceivedError
méthodece n'est pas de travail!
OriginalL'auteur Manish Kumar
Vous pouvez vérifier si une URL est chargé avec succès en utilisant
onProgressChanged()
Cela ne fonctionne pas , le progrès doit atteindre les 100 même si elle ne parvient pas à charger. La réponse par @Mikhail Naganov est probablement le meilleur.
D'accord, Mais aussi par ma connaissance, lors de la webview charge une url et si la page web ne se charge pas, il est livré directement à 100, de sorte que nous pouvons modifier le code, comme si(avancement==99), qu'en dites-vous?
Des progrès pourraient ne pas être exactement 99, car il pourrait passer de 80 droite jusqu'à 100. (Regardez la progressbar dans psba navigateur.)
Mal, Pratiquement, si l'url ne parvient pas à charger, les progrès vont de 10 à 100
OriginalL'auteur Bhavik Mehta