android - onReceivedError 在 android Marshmallow 及以下版本中不起作用
问题描述
我正在尝试使用显示自定义错误页面onReceivedError
,但未显示错误。仅在默认网页上显示的 HTML 不可用错误
webView.setWebViewClient(new WebViewClient(){
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error){
webView.loadUrl("file:///android_asset/error.html");
super.onReceivedError(view, request, error);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url){
swipeRefreshLayout.setRefreshing(false);
super.onPageFinished(view,url);
progressBar.setVisibility(View.GONE);
}
});
error.html 文件是
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body style="text-align:center;font-size:16px;">
<img src="05.png" width="100%">
<div>
<p>Please Check your internet Connection</p>
<p>Please Check Wifi</p>
<p>There is no response from server</p>
</div>
<button style="background-color:#3700B3;color:#fff;border:0;border-radius:5px;padding:7px 15px;" onclick="Reload();">Try Again</button>
<script>
function Reload(){
location.reload();
}
</script>
</body>
</html>
我该如何解决这个问题,请指导我。谢谢。
解决方案
这个问题已经存在了很长时间,可能您已经得到了答案。但是作为新手爱好者,我会尝试回答您的问题,以帮助其他可能面临与您相同问题的新手。
你的代码实际上已经很好了。只有一个小问题。始终仅在 onPageFinished 之后调用 onReceivedError。永远不要在 onPageFinished 之前调用 onReceivedError。
您可能还想调用 onReceivedHttpError 以确保所有错误都由您的 html 资产处理。
所以你的代码应该如下。
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url){
swipeRefreshLayout.setRefreshing(false);
super.onPageFinished(view,url);
progressBar.setVisibility(View.GONE);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request,
WebResourceError error){
webView.loadUrl("file:///android_asset/error.html");
super.onReceivedError(view, request, error);
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request,
WebResourceResponse errorResponse) {
webView.loadUrl("file:///android_asset/error.html");
super.onReceivedHttpError(view, request, errorResponse);
}
});
推荐阅读
- android - Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源
- javascript - 为什么 setTimeout 和 setInterval 在浏览器和 Node.js 中的工作方式不同?
- c++ - Windows10 ld.exe 上的 GCC、GTK:找不到 -ldwmapi
- python - 无法在 Python 中输入(file.xml)
- r - ggplot2条形图中的颜色X轴
- bash - Bash 在键后获取单词
- python-3.x - Python shelve get() 和 keys() 方法返回不一致的结果
- html - 如何让我的联系表格电子邮件正常工作并显示信息?
- discord - Discord.py 音乐机器人队列
- c# - 应用程序初始化 SQL 连接时发生 System.TypeInitializationException