1

webview を使用して Google App Engine Web アプリを表示する 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();
        }
    }

});

onReceivedErrorHTTP エラーのみを受信できません ネットワーク エラーですか? 回避策はありますか?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 に答える