我有使用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错误?
答案 0 :(得分: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());
}