Подтвердить что ты не робот

Как я могу проверить из Android WebView, если страница "404 страница не найдена"?

Я хочу проверить "404 страница не найдена" из WebView, и если она будет 404, я вернусь к Предыдущая страница. Ty для вашей помощи

ИЗМЕНИТЬ также веб-страницы, которые я хочу видеть, являются чистыми .jpg 1.jpg 2.jpg 3.jpg, но у меня нет информации о том, сколько изображений существует. Поэтому, если кто-то может предложить другой метод, он может это сделать.

4b9b3361

Ответ 1

Прикрепите WebViewClient к вашему WebView, где вы переопределите onReceivedError(), чтобы узнать о ответе 404, хотя это, вероятно, будет возвращено как ERROR_FILE_NOT_FOUND.

Ответ 2

Возможно, я немного опоздал на несколько лет, но вот как я должен был его решить, так как ни один из этих ответов не работал.

Я закончил использование 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" будет отличаться от сайта к сайту. Но обычно на одном сайте используется одна и та же "страница не найдена", поэтому вы можете использовать заголовок на сайте. Возможно, вы захотите добавить else, если для, если вы используете несколько сайтов.

Надеюсь, что это поможет кому-то.

Ответ 3

Начиная 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();
}

Ответ 4

Я попытался бы обнаружить загрузку страницы 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;
   }
}

Вы также можете проверить, появляется ли событие onReceivedError, когда возникает ошибка 404.

Ответ 5

Вам не нужно полностью загружать страницу, чтобы проверить, не приводит ли она к ошибке 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;
}

Ответ 6

@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);
   }
}

Ответ 7

Если вы являетесь веб-мастером страницы, загружаемой в webview, вы можете указать название своей страницы, например, "404". После загрузки страницы вы можете получить заголовок страницы с помощью метода getTitle(). Затем, если он содержит 404 или если он отличается от названия вашей страницы, вы можете делать то, что хотите.

Пример:

myView.setWebViewClient(new WebViewClient(){
    @Override  
        public void onPageFinished(WebView view, String url) {  
           String pageTitle = myView.getTitle();
           Toast.makeText(getBaseContext(), pageTitle, Toast.LENGTH_SHORT).show();
        }
});