2013-05-17 168 views
0

我有Android应用程序,它使用webview来显示Google App Engine网络应用程序。如何覆盖在我的应用程序中遇到的默认HTTP Error 504 Gateway timeoutAndroid Webview - HTTP错误504网关超时

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错误?

回答

0

其实你的要求越来越低,因为连接或网络相关的原因的超时..你可以显示自定义页面这样Inshallah

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

Credits to the original answer here.

+0

'onReceivedError'不当错误发生时调用,而是显示一个默认的错误页面。 –

+0

这是否会一直发生?\ – Nezam

+0

现在试试我的编辑 – Nezam