Google雖然在Android6.0解決了這個問題,但是Android6.0以下的手機市場佔有率還是很多的,所以我們就要自己手動去解決這個問題。
處理404、500
在Android6.0以下我們是不能直接獲取到404或者500的,Android6.0谷歌解決了這個問題。那麼在Android6.0以下的系統我們如何處理404這樣的問題呢?
兩種解決方案:
方案一(推薦)通過獲取網頁的title,判斷是否爲系統默認的404頁面
我們可以在WebChromeClient()子類中可以重寫他的onReceivedTitle()方法
Android6.0以下判斷404或者500:
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
// android 6.0 以下通過title獲取
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
if (title.contains("404") || title.contains("500") || title.contains("Error")) {
view.loadUrl("about:blank");// 避免出現默認的錯誤界面
view.loadUrl(mErrorUrl);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
Android6.0以上判斷404或者500:
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
// 這個方法在6.0纔出現
int statusCode = errorResponse.getStatusCode();
System.out.println("onReceivedHttpError code = " + statusCode);
if (404 == statusCode || 500 == statusCode) {
view.loadUrl("about:blank");// 避免出現默認的錯誤界面
view.loadUrl(mErrorUrl);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
判斷斷網和鏈接超時
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
// 斷網或者網絡連接超時
if (errorCode == ERROR_HOST_LOOKUP || errorCode == ERROR_CONNECT || errorCode == ERROR_TIMEOUT) {
view.loadUrl("about:blank"); // 避免出現默認的錯誤界面
view.loadUrl(mErrorUrl);
}
}