Возможно, я опоздал на несколько лет, но вот как я должен был решить эту проблему, поскольку ни один из этих ответов не сработал.
В итоге я использовал onReceivedTitle и сравнил заголовок с заголовком страницыв этом случае «страница не найдена») с сайта, который я пытался открыть.
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();
}
}
});
«pnotfound» будет отличаться от сайта к сайту.Но обычно один сайт использует ту же «страницу не найдена», поэтому вы можете использовать заголовок на сайте.Возможно, вы захотите добавить еще, если для, если вы используете несколько сайтов.
Надеюсь, это кому-то поможет.