美文网首页Android 日常收录
Android - 监听WebView加载失败

Android - 监听WebView加载失败

作者: 大博同学 | 来源:发表于2019-12-31 11:30 被阅读0次
    • 使用场景

    加载webview时发生Error进行错误界面替换(或者监听返回键)

    一、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) {
                                // 这个地方换成本地加载失败时显示的界面
                                view.loadUrl("about:blank");
                                isWebViewError = false;
                                LogUtil.d(TAG, "onReceivedHttpError: 読み込みに失敗しました - error ->" + statusCode);
                            }
                        }
                    }
                }
    
            });
    

    二、备注

    • 变量含义

    isWebViewError == 加载成功或失败(成功/默认 = true,失败时为false)
    MemoryUtil自定义的数据保存类

    • 代码解释(主要针对onReceivedHttpError方法)

    此方法会监听到webview界面上的所有的error异常(包括一些三方库的异常信息),
    所以需要添加判断进行过滤,此段代码中的过滤方式是,webview.loadUrl之前进行URL的分割,
    正常情况下服务器返回的URL字段应该是对应的String类型
    使用new URL("服务器返回json中的URL");(记得try),进行url分割拆分出Path,然后在onReceivedHttpError方法中
    进行判断,如果path相等,则进行异常判断出现异常显示异常界面,如果不相等则正常显示界面。

    • 注意

    onReceivedHttpError此方法只会在android 6.0之上才会进入
    ,6.0以下则进入onReceivedTitle(),
    网络相关的异常(断网,网络不可用的情况下)在onReceivedError方法中捕获

    相关文章

      网友评论

        本文标题:Android - 监听WebView加载失败

        本文链接:https://www.haomeiwen.com/subject/yvjboctx.html