que podría ser de unos años demasiado tarde, pero aquí es cómo tuve que resolverlo ya que ninguna de estas respuestas trabajó.
Terminé usando onReceivedTitle y comparé el título con el título de la página (en este caso, "página no encontrada") del sitio que intentaba 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 generalmente un sitio utiliza la misma "página no encontrada", por lo tanto, puede usar el título en el sitio. Es posible que desee agregar un else si está utilizando varios sitios.
Espero que ayude a alguien.
Es posible que desee echa un vistazo a [este hilo] (http://groups.google.com/group/android-developers/browse_thread/thread/1d2f0b04b2818181/) del Android-developers grupo. –