WebViewから「404ページが見つかりません」を確認したいのですが、404の場合は前のページに戻ります。あなたの助けのタイ
編集したいウェブページも純粋な.jpg 1.jpg 2.jpg 3.jpgですが、画像の数に関する情報はありません。したがって、誰かが別の方法を提案できる場合は、彼はそうすることができます。
SDK 23(Android M)以降では、onReceivedHttpError
メソッドを使用して404およびその他のHTTPエラーをキャッチできます。 WebViewClient
内をオーバーライドするだけです
@Override
public void onReceivedHttpError (WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
Toast.makeText(view.getContext(), "HTTP error "+errorResponse.getStatusCode(), Toast.LENGTH_LONG).show();
}
私は数年では遅すぎるかもしれませんが、これらの答えがどれもうまくいかなかったので、ここでそれを解決する必要がありました。
結局、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」はサイトごとに異なります。ただし、通常は1つのサイトが同じ「ページが見つかりません」を使用するため、サイトのタイトルを使用できます。複数のサイトを使用している場合は、elseを追加することをお勧めします。
それが誰かのために役立つことを願っています。
404ページの読み込みを検出しようとします。そのためには、shouldOverrideUrlLoading
クラスに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;
}
}
404エラーが発生したときに、onReceivedError
イベントが表示されるかどうかを確認することもできます。
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);
}
}