>>分享Android开发相关的技术 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22027 个阅读者 刷新本主题
 * 贴子主题:  Android - 监听WebView加载失败的处理 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-12-31 16:02:57     消息  查看  搜索  好友  邮件  复制  引用

  • 使用场景
加载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方法中捕获

----------------------------
原文链接:https://www.jianshu.com/p/f6ca396aa8db



程序猿的技术大观园:www.javathinker.net



[这个贴子最后由 admin 在 2020-01-01 16:34:36 重新编辑]
  Java面向对象编程-->第一个Java程序
  JavaWeb开发-->Servlet技术详解(Ⅰ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->创建非阻塞的HTTP服务器
  精通Spring-->计算属性和数据监听
  Vue3开发-->通过Axios访问服务器
  Android开发教程之Java开发环境配置和运行第一个程序
  Android定义的路径全局变量汇总
  Android网络编程之WebKit应用
  Android线程处理简述
  Android多线程及异步处理问题
  Android Application Theme的实现及管理
  Android 使用SQLite数据库
  Android多线程断点续传
  Android 4.0 : 复制APK,复制动态库的Android.mk 文件
  Android学习建议
  Android 自定义九宫格手势锁
  Android端使用OpenGL ES加载OBJ文件数据
  Android仿Volley手写属于自己的万能网络访问框架
  一款在Linux下运行Android应用的软件:xDroid
  Android开发学习笔记:Intent的简介以及属性的详解-IT的点点...
  更多...
 IPIP: 已设置保密
树形列表:   
1页 1条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。