Je veux vérifier une "page 404 non trouvée" à partir d'une vision webview et si c'est un 404, je reviendrai à la page précédente. TY pour votre aide
Modifier aussi les pages Web que je veux voir sont pure .jpg 1.jpg 2.jpg 3.jpg mais je n'ai aucune information sur combien d'images existent. Donc, si quelqu'un peut proposer une autre méthode, il est invité à le faire.
Démarrage de SDK 23 (Android M) Vous pouvez utiliser onReceivedHttpError
méthode pour attraper 404 et d'autres erreurs HTTP. Juste remplacer à l'intérieur de votre WebViewClient
@Override
public void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
Toast.makeText(view.getContext(), "HTTP error "+errorResponse.getStatusCode(), Toast.LENGTH_LONG).show();
}
Je pourrais être quelques années trop tard, mais voici comment je devais le résoudre car aucune de ces réponses n'a fonctionné.
J'ai fini par utiliser Onreceedtitle et comparer le titre avec le titre de la page (dans ce cas "page non trouvée") du site que j'essayais d'ouvrir.
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
// TODO Auto-generated method stub
super.onReceivedTitle(view, title);
CharSequence pnotfound = "The page cannot be found";
if (title.contains(pnotfound)) {
pagenotfound = true;
view.stopLoading();
webview.loadUrl("https://www.google.com/search?hl=en&q=stackoverflow");
}
}
public void onProgressChanged(WebView view, int progress) {
activity.setProgress(progress * 1000);
}
});
webview.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Toast.makeText(activity, "Oh no! " + description,
Toast.LENGTH_SHORT).show();
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
if (dialog.isShowing()) {
dialog.dismiss();
}
}
});
Le "pnotfound" sera différent du site à site. Mais généralement un site utilise la même "page non trouvée", vous pouvez donc utiliser le titre sur le site. Vous voudrez peut-être ajouter un autre si vous utilisez plusieurs sites.
J'espère que cela aide à quelqu'un.
J'essaierais de détecter le chargement de 404 pages. Vous pouvez le faire en implémentant shouldOverrideUrlLoading
méthode dans la classe WebViewClient
.
mGenericWebClient = new GenericWebClient();
mWebView.setWebViewClient(mGenericWebClient);
public class GenericWebClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
if (url=="your404page.html") {
view.goBack();
return true;
}
return false;
}
}
Vous pouvez également vérifier si onReceivedError
événement apparaît lorsque l'erreur 404 se produit.
Vous n'avez pas besoin de charger complètement la page pour vérifier s'il en résulte une erreur 404:
private int getRange() {
try {
HttpURLConnection.setFollowRedirects(false);
int Count = 1;
URL testURL;
while (true) {
testURL = new URL(
(myURL + "/" + Integer.toString(Count++) + ".jpg"));
HttpURLConnection con = (HttpURLConnection) testURL
.openConnection();
con.setRequestMethod("HEAD");
if (con.getResponseCode() == 404) {
return Count - 2;
}
Log.e("RESPONCE", Integer.toString(con.getResponseCode()));
}
} catch (Exception e) {
}
return 1;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
String pageTitle = myWebView.getTitle();
String[] separated = pageTitle.split("-");
if(separated[0].equals("404")) {
Log.i(TAG, "detect page not found error 404");
}
else {
findViewById(R.id.progress1).setVisibility(View.GONE);
}
}