WebView加载网页失败以后

在APP和网页交互时,很有可能出现加载失败的情况。
这里写图片描述

为了不让用户看到上述令人崩溃的默认失败页面,这里进行一下简单处理!

1.404错误

  webView.setWebViewClient(new WebViewClient() {

            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
       //TODO
            }

            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
       //TODO

            }

这种错误是挺奇怪的,上述onReceiveError根本不会调用!搜索了好久,见网上有人这么解决:

 webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                CharSequence pnotfound = "404";
                if (title.contains(pnotfound)) {
                    view.stopLoading();
                    view.loadUrl(NOT_FOUND_PAGE);
                }
            }

        });

经测试上述关系是成立的,NOT_FOUND_PAGE——对应于一个本地网页。

2.其他错误:

                view.loadUrl(TIME_OUT_PAGE);

在onReceiveError进行捕获。这该方法内,加载一张本地网页就ok了!注意一点,如果手机没有连入网络也会走这里!

3.本地网页写法:

<html>
<body>
<div>
    <table width="50%" height="50%" >
        <tr>
            <td>
                <p style="text-align:center;"><img src="time_out.png"></p>

            </td>
        </tr>
    </table>
</div>
</body>
</html>

这里写图片描述

没有实现居中垂直对齐,这个网页在pc Chrome中是可以居中对齐的,对网页是外行,这里就不研究了。

4.完整java代码:

package com.hang.androidtestdemo;

import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends FragmentActivity {
    WebView webView;
    public static final String NOT_FOUND_PAGE = "file:///android_asset/not_found.html";
    public static final String TIME_OUT_PAGE = "file:///android_asset/time_out.html";

    public static final String TEST_URL = "http://www.dingdongfm.com/wechat/Share.do?Fn=NewsShare&RowKey=26309149645788628&type=0&userId=vT3N38Aw";
    public static final String ERROR_PAGE = "http://www.dingdongfm.com/karbonn/add/apk//3_1/";

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        webView = new WebView(this);
        setContentView(webView);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl(TEST_URL);
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onReceivedTitle(WebView view, String title) {
                super.onReceivedTitle(view, title);
                CharSequence pnotfound = "404";
                if (title.contains(pnotfound)) {
                    view.stopLoading();
                    view.loadUrl(NOT_FOUND_PAGE);
                }
            }

        });
        webView.setWebViewClient(new WebViewClient() {

            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                super.onReceivedError(view, errorCode, description, failingUrl);
                // Handle the error
                view.loadUrl(TIME_OUT_PAGE);


            }

            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
            }
        });
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值