je pourrais être quelques années trop tard, mais voici comment je devais le résoudre car aucune de ces réponses a travaillé.
J'ai fini par utiliser onReceivedTitle et comparer le titre avec le titre de la page (dans ce cas "page introuvable") 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 d'un site à. Mais généralement un site utilise la même "page introuvable" donc vous pouvez utiliser le titre sur le site. Vous pourriez vouloir ajouter un autre si c'est le cas si vous utilisez plusieurs sites.
Espérons que cela aide quelqu'un.
Vous pouvez consulter [ce sujet] (http://groups.google.com/group/android-developers/browse_thread/thread/1d2f0b04b2818181/) des développeurs Android groupe. –