¿Cómo puedo comprobar desde Android WebView si una página es una "página 404 no encontrada"?

Quiero comprobar una "404 página no encontrada" de un WebView y si es un 404 entonces vuelvo a la página anterior. Ty por tu ayuda

EDIT también las páginas web que quiero ver son puros .jpg 1.jpg 2.jpg 3.jpg pero no tengo ninguna información de cuántas imágenes existen. Así que si alguien puede proponer otro método, es bienvenido a hacerlo.

Adjunte un WebViewClient a su WebView , donde reemplaza onReceivedError() para averiguar sobre la respuesta 404 – aunque probablemente se devolverá como ERROR_FILE_NOT_FOUND .

Podría ser algunos años demasiado tarde, pero aquí es cómo tuve que resolverlo ya que ninguna de estas respuestas funcionó.

Terminé usando onReceivedTitle y comparando el título con el título de la página (en este caso "página no encontrada") del sitio que estaba tratando de abrir.

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

El "pnotfound" será diferente de un sitio a otro. Pero por lo general un sitio utiliza la misma "página no encontrada", por lo tanto, puede utilizar el título en el sitio. Es posible que desee añadir otro si para si está utilizando varios sitios.

Espero que ayude para alguien.

Iniciando SDK 23 (Android M) puede utilizar el método onReceivedHttpError para capturar 404 y otros errores de HTTP. Simplemente WebViewClient dentro de su WebViewClient

 @Override public void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) { Toast.makeText(view.getContext(), "HTTP error "+errorResponse.getStatusCode(), Toast.LENGTH_LONG).show(); } 

Intentaría detectar la carga de 404 páginas. Puede hacerlo implementando el método shouldOverrideUrlLoading en la clase 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; } } 

También puede comprobar si el evento onReceivedError aparece, cuando se produce un error 404.

Lo hice así. No necesita descargar la página para comprobar si es 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); } } 

Si eres webmaster de la página que se está cargando en webview, puedes configurar el título de la página como '404'. Luego, después de cargar la página, puedes obtener el título de la página con el método getTitle() . Entonces si contiene 404 o si es diferente del título de su página usted puede hacer lo que usted quiere.

Ejemplo:

 myView.setWebViewClient(new WebViewClient(){ @Override public void onPageFinished(WebView view, String url) { String pageTitle = myView.getTitle(); Toast.makeText(getBaseContext(), pageTitle, Toast.LENGTH_SHORT).show(); } }); 
  • Android WebView se bloquea al hacer clic en un enlace
  • JavaScript no funciona en Android Webview?
  • Una URL en particular no se está cargando en WebView de Samsung Note2
  • Habilitar el zoom en WebView android
  • Vista web de Android, haga que las URL se abran en diferentes navegadores
  • Android: haga clic en el enlace de una página de la vista web
  • Cómo configurar url en WebView desde un archivo de diseño xml en Android?
  • Android: minHeight no funciona en la vista web
  • ¿Cómo forzar a WebView a saltar imágenes?
  • La mejor manera de interceptar una solicitud de WebView en Android
  • JavascriptInterface en Android no funciona con APK en modo de lanzamiento
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.