前言
對於移動端的混合模式開發,一般都會涉及到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地址已經不存在