Android WebView加载出错时自定义错误页面

在Android开发中,当WebView加载URL失败时,通常会显示默认的错误页面。为了提供更好的用户体验,开发者可以创建自定义错误页面来替代默认页面。实现这一功能主要通过在WebViewClient的onReceivedError, onReceivedHttpError和onReceivedError方法中进行处理,并在调用super之前执行。关键步骤包括先使用view.loadUrl("about:blank")清空错误页面,然后将自定义的视图添加到WebView中。" 8776583,469170,LevelDB源码解析:版本控制与DB接口深入,"['数据库', '源码分析', '数据存储', 'LevelDB框架']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发中难免使用WebView加载url的情况,存在很多加载失败的原因,网络异常,404等等,这个时候会给用户展示一个机器人的错误页面,这个很不友好,一般会自己做一个页面覆盖这个错误页面,这个功能主要是通过在WebViewClient的几个方法中做处理,如下代码,需要在onReceivedError,onReceivedHttpError,onReceivedError这三个方法中做处理,需要在super之前做处理,需要注意的是很必要的一句代码是 view.loadUrl("about:blank");否则始终会出现错误页面,然后我们把自定义的view addView到WebView,就这样。

 webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                view.loadUrl("about:blank");// 避免出现默认的错误界面
                view.removeAllViews();
                int width = (int) DeviceUtils.getScreenWidth(CategoryDetailActivity.this);
                int height = (int) DeviceUtils.dip2px(CategoryDetailActivity.this, 230);
                view.addView(hintWeb, width, height);
                iv_live_cover.setVisibility(View.GONE);
                webViewProgress.setVisibility(View.GONE);
                tv_network_error_hint.setVisibility(View.VISIBLE);
                super.onReceivedError(view, errorCode, description, failingUrl);
            }

            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
                view.loadUrl("about:blank");// 避免出现默认的错误界面
                view.removeAllViews();
                int width = (int) DeviceUtils.getScreenWidth(CategoryDetailActivity.this);
                int height = (int) DeviceUtils.dip2px(CategoryDetailActivity.this, 230);
                view.addView(hintWeb, width, height);
                int statusCode = errorResponse.getStatusCode();
                if (404 == statusCode || 500 == statusCode) {
                    iv_live_cover.setVisibility(View.GONE);
                    webViewProgress.setVisibility(View.GONE);
                    tv_network_error_hint.setVisibility(View.VISIBLE);
                }
                super.onReceivedHttpError(view, request, errorResponse);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                view.loadUrl("about:blank");// 避免出现默认的错误界面
                view.removeAllViews();
                int width = (int) DeviceUtils.getScreenWidth(CategoryDetailActivity.this);
                int height = (int) DeviceUtils.dip2px(CategoryDetailActivity.this, 230);
                view.addView(hintWeb, width, height);
                iv_live_cover.setVisibility(View.GONE);
                webViewProgress.setVisibility(View.GONE);
                tv_network_error_hint.setVisibility(View.VISIBLE);
                super.onReceivedError(view, request, error);
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                webViewProgress.setVisibility(View.VISIBLE);
//                tv_network_error_hint.setVisibility(View.GONE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                iv_live_cover.setVisibility(View.GONE);
                webViewProgress.setVisibility(View.GONE);
                if (!NetworkUtils.isAvailable(CategoryDetailActivity.this)) {
                    tv_network_error_hint.setVisibility(View.VISIBLE);
                } else {
                    tv_network_error_hint.setVisibility(View.GONE);
                }
            }
        });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值