前言
对于移动端的混合模式开发,一般都会涉及到WebView这一控件,在该控件加载网页的过程中,多多少少都会遇到加载网页失败等情况,那么也该做个记录,记录下这些坑。
1.调用onReceivedError方法的异常情况:
WebView加载网页时,一直跑WebViewClient的onReceivedError方法,而网页是可以正常加载出来的,这就郁闷了。onReceivedError是网页加载失败才调用的,一般也在函数内做网页加载失败的处理,而现在网页是加载出来的,却跑到onReceivedError方法,执行网页失败的操作。
怎解
private WebViewClient client = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError
error) {
super.onReceivedError(view, request, error);
isReLoading = false;
loadingDialog.dismiss();
updateView(false); //隐藏网页,显示加载失败的原生页面
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
loadingDialog.show();
}
};
在onReceivedError方法里的第三个回调参数是WebResourceError,那么这个类是否有error的信息呢?通过打Log的方式,打印出下面WebResourceError的方法返回值:
error.getDescription();
error.getErrorCode();
error.toString();
分别输出:
net::ERR_CONTENT_LENGTH_MISMATCH
-1
com.android.webview.chromium.WebViewContentsClientAdapter$WebResourceErrorImpl@34c3f42
####结合上面打印的Log,貌似是网页资源异常的问题,问了后台的,原来是后台在压缩并修改网页资源(图片)导致的,瞎折腾咯…
2.网页在手机加载不出来,报net::ERR_CACHE_MISS
怎解
可能是忘记在文件清单中加网络访问权限
<uses-permission android:name="android.permission.INTERNET"/>
3.网页在手机加载不出来,webView报net::ERR_NAME_NOT_RESOLVER
怎解
无网络或本地没有缓存等情况下才会出现这个
4.网页在手机加载不出来,webView报net::ERR_ADDRESS_UNREACHABLE
怎解
网页对应的url地址已经不存在