- 使用場(chǎng)景
加載webview時(shí)發(fā)生Error進(jìn)行錯(cuò)誤界面替換(或者監(jiān)聽返回鍵)
一稼虎、java代碼
mWebView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
if (request.isForMainFrame()) {
view.loadUrl("about:blank");
isWebViewError = false;
}
}
@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
if (!TextUtils.isEmpty(MemoryUtil.getWebViewPath())) {
String webViewPath = MemoryUtil.getWebViewPath();
LogUtil.d(TAG, "Host -------webview------>" + webViewPath);
if (request.getUrl().getPath().equals(MemoryUtil.getWebViewPath())) {
int statusCode = errorResponse.getStatusCode();
if (404 == statusCode || 500 == statusCode) {
// 這個(gè)地方換成本地加載失敗時(shí)顯示的界面
view.loadUrl("about:blank");
isWebViewError = false;
LogUtil.d(TAG, "onReceivedHttpError: 読み込みに失敗しました - error ->" + statusCode);
}
}
}
}
});
二、備注
- 變量含義
isWebViewError == 加載成功或失敗(成功/默認(rèn) = true,失敗時(shí)為false)
MemoryUtil自定義的數(shù)據(jù)保存類
- 代碼解釋(主要針對(duì)onReceivedHttpError方法)
此方法會(huì)監(jiān)聽到webview界面上的所有的error異常(包括一些三方庫的異常信息),
所以需要添加判斷進(jìn)行過濾,此段代碼中的過濾方式是,webview.loadUrl
之前進(jìn)行URL的分割,
正常情況下服務(wù)器返回的URL字段應(yīng)該是對(duì)應(yīng)的String類型
使用new URL("服務(wù)器返回json中的URL");
(記得try),進(jìn)行url分割拆分出Path,然后在onReceivedHttpError
方法中
進(jìn)行判斷,如果path相等,則進(jìn)行異常判斷出現(xiàn)異常顯示異常界面,如果不相等則正常顯示界面。
- 注意
onReceivedHttpError
此方法只會(huì)在android 6.0之上才會(huì)進(jìn)入
,6.0以下則進(jìn)入onReceivedTitle()
,
網(wǎng)絡(luò)相關(guān)的異常(斷網(wǎng),網(wǎng)絡(luò)不可用的情況下)在onReceivedError
方法中捕獲