¿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(); } }); 
  • ¿Cómo referencia un archivo almacenado en el almacenamiento interno desde un WebView?
  • Inyectar JavaScript antes de html cargado con Android WebView
  • En el emulador de Android, al intentar cargar una vista web, obtengo net :: err_cache_miss
  • WebView muestra un signo de interrogación en un cuadro azul
  • Transmisión de la matriz de la actividad a Javascript
  • Adición de cabeceras personalizadas a todas las solicitudes de la vista web de shouldInterceptRequest en Android
  • Error de vista web de Android "Señal fatal 5 (SIGTRAP)"
  • ANDROID / WEBVIEW- Uncaught TypeError: Object no tiene ningún método 'changeActivity' en el archivo:
  • Android WebView app fallando en el emulador: null Contexto de la aplicación?
  • Android habilita controles de zoom y pinchadura en Webview
  • La vista web de Android no puede convertir el video de youtube incrustado a través de iframe
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.