recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment juger 404 en webview sous Android ?

J'utilise

 @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
            super.onReceivedError(view, request, error);
            PtrCLog.d("WebFragment", "onReceivedError: " + "");

        }
        
        

Cette méthode n'a pas été annulée. Après vérification, il est indiqué qu'elle nécessite l'API23. . Quelqu'un connaît-il d'autres moyens d'obtenir 404 ?

phpcn_u1582phpcn_u15822743 Il y a quelques jours606

répondre à tous(2)je répondrai

  • phpcn_u1582

    phpcn_u15822017-05-16 13:28:53

            new WebViewClient() {
                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                    super.onReceivedError(view, errorCode, description, failingUrl);
                    if (errorCode == 404) {
                        doSomething();
                    }
                }
    
                @Override
                public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                    super.onReceivedError(view, request, error);
                    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
                        int errorCode = error.getErrorCode();
                        if (errorCode == 404) {
                            doSomething();
                        }
                    }
                }
            };

    répondre
    0
  • 滿天的星座

    滿天的星座2017-05-16 13:28:53

    Exécutez une AsyncTask dans onPageStarted, utilisez un client Http tel que OkHttpClient dans AsyncTask pour faire une demande pour l'URL à laquelle il faut accéder et obtenez le code

        class WebViewStatusRequester extends AsyncTask<String, String, Integer> {
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                web.setVisibility(View.GONE);
            }
            @Override
            protected void onPostExecute(Integer result) {
                super.onPostExecute(result);
                if(result == 1) {
                    web.setVisibility(View.VISIBLE);
                } else if(result == 0) {
                    showLoadFail();
                }
            }
            @Override
            protected Integer doInBackground(String... params) {
                String url = params[0];
                if(url.substring(0, 4).equals("file") == false) {
                    try {
                        OkHttpClient client = new OkHttpClient();
                        Request request = new Request.Builder().url(url).build();
                        Response response = client.newCall(request).execute();
                        if(response.isSuccessful()) {
                            return 1;
                        } else {
                            Log.i("TAG", "fail code:" + response.code());
                            return 0;
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return 0;
                }
                return 1;
            }
        }

    Ici, Webview et OkHttpClient sont effectivement chargés, mais le WebView est masqué lorsque l'AsyncTask est en cours d'exécution. S'il est confirmé qu'il est 200, il sera affiché. Si ce n'est pas 200, la page dont le chargement a échoué sera affichée.

    répondre
    0
  • Annulerrépondre