android webview 500,Android webview处理超时以及404、500、断网、timeout等页面的问题

一、超时处理方法

有时候断网、网络状况不好或者发生错误等等都会导致webview加载不到页面的情况,这时候我们需要做相应的处理方法,如一个刷新按钮允许用户重新加载,所以需要做相应处理方法,常用的是设置一个时间计时器,并重写WebViewClient中onPageStarted和onPageFinished函数,在onPageStarted执行时启动计时,在onPageFinished关闭计时,并在计时器中执行超时之后执行相应处理,参考代码如下:

privateHandler mHandler =new Handler();//超时之后的处理Handler

private Timer timer;//计时器

privatelongtimeout = 5000;//超时时间

@Override

publicvoid onPageStarted(WebView view, String url, Bitmap favicon) {

timer =new Timer();

TimerTask tt =new TimerTask() {

@Override

publicvoid run() {

/* * 超时后,首先判断页面加载是否小于100,就执行超时后的动作 */

if(TestJsActivity.this.mWebView.getProgress() < 100) {

mHandler.sendEmptyMessage(0x101);

timer.cancel();

timer.purge();

}

}

};

timer.schedule(tt, timeout, 1);

}

/*** onPageFinished指页面加载完成,完成后取消计时器 */

@Override

publicvoid onPageFinished(WebView view, String url) {

timer.cancel();

timer.purge();

}

二、其他网络错误处理

除了超时之外,有时候会遇到404、500、断网、timeout等网页错误,这时候需要判断Android版本去处理,6.0以上和6.0一下处理方法不同,具体参照一下代码:

Android6.0以下判断404或者500:重写WebChromeClient()的onReceivedTitle()方法

@Override

public void onReceivedTitle(WebView view, String title) {

super.onReceivedTitle(view, title);

// android 6.0 以下通过title获取

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {

if (title.contains("404") || title.contains("500") || title.contains("Error")) {

view.loadUrl("about:blank");// 避免出现默认的错误界面

view.loadUrl(mErrorUrl);

}

}

}

Android6.0以上404或者500处理:重写WebViewClient的onReceivedHttpError()方法

@TargetApi(android.os.Build.VERSION_CODES.M)

@Override

public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {

super.onReceivedHttpError(view, request, errorResponse);

int statusCode = errorResponse.getStatusCode();

if (404 == statusCode || 500 == statusCode) {

view.loadUrl("about:blank");// 避免出现默认的错误界面

view.loadUrl(mErrorUrl);

}

}

Android6.0以上断网和链接超时处理:重写WebViewClient的onReceivedError()方法

@Override

public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {

super.onReceivedError(view, errorCode, description, failingUrl);

// 断网或者网络连接超时

if (errorCode == ERROR_HOST_LOOKUP || errorCode == ERROR_CONNECT || errorCode == ERROR_TIMEOUT) {

view.loadUrl("about:blank"); // 避免出现默认的错误界面

view.loadUrl(mErrorUrl);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值