Android - 监听WebView加载失败

  • 使用场景

加载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方法中捕获

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 由于业务需求更新迭代快,发布新版本的App需要时间,即使发布了也不能保证用户立即更新,因此越来越多的app使...
    JeremySun0823阅读 7,860评论 1 10
  • WebView·开车指南 2016-08-31BugDev 北京市东城区首席Bug布道师开山之作,一整月交通事故血...
    53c021c38a1d阅读 4,282评论 0 1
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 11,713评论 0 17
  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,117评论 2 7
  • 昏黄的灯光 一个人的操场 为寻求你的身影 兜兜转转的游荡 你是夜空中的星海 光芒闪耀的存在 我是一粒尘埃 在你的身边徘徊
    雨天吖阅读 2,338评论 0 3