Android WebView加载网页失败异常处理

开发过程中会遇到WebView加载失败的时候,会出现404、500、找不到网页等错误,页面显示系统默认的错误界面。系统默认界面难看,而且也会暴露网页地址不安全。所以我们需要对WebView加载失败或错误进行处理,自定义一个统一样式来加载失败的界面。

网页加载失败图

解决方案

我们可以自定义一个View用来展示加载失败的界面,也可以写一个错误展示的 Html让 WebView加载等。这里我们需要先重写WebViewClientonReceivedError()WebChromeClientonReceivedTitle()方法。

  • Android 6.0以下处理方法:

① 判断 Html页面的标题中是否含有“Error”、“找不到网页”等信息;

@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") || title.contains("找不到网页") || title.contains("网页无法打开")) {
                view.loadUrl("about:blank");// 避免出现默认的错误界面
                view.loadUrl(mErrorUrl);// 加载自定义错误页面
            }
        }
    }

② 重写WebChromeClientonReceivedTitle()方法处理(该方法已过时)

@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
    super.onReceivedError(view, errorCode, description, failingUrl);
    //6.0以下执行
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return;
    }
    view.loadUrl("about:blank");// 避免出现默认的错误界面
    view.loadUrl(mErrorUrl);// 加载自定义错误页面
}
  • Android 6.0以上处理方法:

① 重写WebViewClientonReceivedHttpError()方法,判断错误码来处理;

@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
    super.onReceivedHttpError(view, request, errorResponse);
    // 这个方法在 android 6.0才出现
    int statusCode = errorResponse.getStatusCode(); 
    if (404 == statusCode || 500 == statusCode) {
        view.loadUrl("about:blank");// 避免出现默认的错误界面
        view.loadUrl(mErrorUrl);// 加载自定义错误页面
    }
}

② 重写WebViewClientonReceivedError()方法处理

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onReceivedError(WebView webView, WebResourceRequest webResourceRequest, WebResourceError webResourceError) {
    super.onReceivedError(webView, webResourceRequest, webResourceError);
    if (webResourceRequest.isForMainFrame()) {//是否是为 main frame创建
        view.loadUrl("about:blank");// 避免出现默认的错误界面
        view.loadUrl(mErrorUrl);// 加载自定义错误页面
    }
}

net::ERR_NAME_NOT_RESOLVED

 

发送接口时提示下图错误信息:
在这里插入图片描述
原来:路径错误,两个http,改成一个就可以了。

 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值