1

我有使用 webview 显示 Google App Engine 网络应用程序的 android 应用程序。如何覆盖HTTP Error 504 Gateway timeout我的应用程序中遇到的默认值?

HTTP Error 504 Gateway timeout

The server, while acting as a gateway or proxy, did not receive a 
timely response from the upstream server it accessed in attempting 
to complete the request.

onReceivedError当没有可用的互联网连接和其他错误时,我已经覆盖了哪些工作。

webView.setWebViewClient(new WebViewClient(){
    ...

    @SuppressLint("DefaultLocale")
    @Override
    public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {

        try {
            String template = streamToString(getAssets().open("html/error.html"));
            String data = template.replaceAll("%DESCRIPTION%", description.toLowerCase())
                    .replaceAll("%WEBSITE_URL%", WEBSITE_URL);

            view.loadDataWithBaseURL("file:///android_asset/html/", data, "text/html", "utf-8", null);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

});

onReceivedError不能收到 HTTP 错误只有网络错误?任何解决方法?android webview如何拦截HTTP错误?

4

1 回答 1

0

实际上,由于连接性低或与网络相关的原因,您的请求会超时;您可以通过这种方式显示自定义页面:

  webview.setWebViewClient(new WebViewClient() {
            /* (non-Javadoc)
            * @see android.webkit.WebViewClient#onPageStarted(android.webkit.WebView, java.lang.String, android.graphics.Bitmap)
            */
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                System.out.println("page loading started");
                // TODO Auto-generated method stub
                if(!isNetworkAvailable2())
                {
                    //showInfoMessageDialog("network not available");
                   //load here your custom offline page for handling such errors

                    System.out.println("network not available");
                    return;
                }
                else System.out.println("network available");

                super.onPageStarted(view, url, favicon);

            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                isConnected=isNetworkAvailable2();
                if (isConnected) {
                    // return false to let the WebView handle the URL
                    return false;
                } else {
                    // show the proper "not connected" message
                // view.loadData(offlineMessageHtml, "text/html", "utf-8");
                    // return true if the host application wants to leave the current 
                    // WebView and handle the url itself
                    return true;
                }
            }
            @Override
            public void onReceivedError (WebView view, int errorCode, 
                String description, String failingUrl) {
                if (errorCode == ERROR_TIMEOUT) {
                    view.stopLoading();  // may not be needed
                // view.loadData(timeoutMessageHtml, "text/html", "utf-8");
                }
            }
        });
        //webview.setWebChromeClient(new WebChromeClient());        
    }

归功于此处的原始答案。

于 2013-05-17T04:22:18.190 回答