Android webview如何获取网络所有状态码,如200,404,304等等

某农村小伙 2016-12-27 10:08:17
如题,我写了一个自定义的错误网页来代替默认的加载错误网页,但是我发现一些网站加载错误还是不走下面的错误回调方法,所以我就想干脆根据200状态码判断算了,如果不是200就显示自定义网页,但是本人找了好多帖子,都没有获取所有状态码的方法,求大神解答啊......
menuWeb.setWebViewClient(new WebViewClient() {//在本界面打开超链接
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);//如果网页里面有超链接,点击在本网页打开,如果不设置,会打开系统浏览器
return true;
}

/**
* 网页页面开始加载的时候,执行的回调方法
* @param view
* @param url
* @param favicon
*/
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {//网页页面开始加载的时候
rlWebLoadingLayout.setVisibility(View.VISIBLE);//显示正在加载动画
rlLoadingErrorInfo.setVisibility(View.GONE);//隐藏加载错误界面
webViewLayout.setVisibility(View.GONE);//隐藏网页内容界面
super.onPageStarted(view, url, favicon);
Log.i(TAG, "onPageStarted: __________url________: " + url);
getStatusCode(url);
}

/**
* 网页加载结束的时候执行的回调方法
* @param view
* @param url
*/
@Override
public void onPageFinished(WebView view, String url) {//网页加载结束的时候
rlWebLoadingLayout.setVisibility(View.GONE);//隐藏加载动画
if (!loadError) {
webViewLayout.setVisibility(View.VISIBLE);
} else {
//您找的页面暂时走丢了...
rlLoadingErrorInfo.setVisibility(View.VISIBLE);//显示加载错误界面
}
Log.i(TAG, "_________________________onPageFinished________________________");
}


@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
loadError = true;
Log.i(TAG, "_________________×________onReceivedError________________________");
}

//
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
loadError = true;
Log.i(TAG, "_________________________onReceivedSslError________________________");
}

@Override
public void onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse) {
super.onReceivedHttpError(view, request, errorResponse);
loadError = true;
Log.i(TAG, "_________________________onReceivedHttpError________________________");
}

/**
* 页面加载错误时执行的方法,但是在6.0以下,有时候会不执行这个方法
* @param view
* @param request
* @param error
*/
@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
loadError = true;
Log.i(TAG, "________________VERSION_CODES.M_________onReceivedError________________________");
}
});
menuWeb.setWebChromeClient(new WebChromeClient() {
/**
* 当WebView加载之后,返回 HTML 页面的标题 Title
* @param view
* @param title
*/
@Override
public void onReceivedTitle(WebView view, String title) {
//判断标题 title 中是否包含有“error”字段,如果包含“error”字段,则设置加载失败,显示加载失败的视图
if (!TextUtils.isEmpty(title) && ((title.toLowerCase().contains("error") || title.toLowerCase().contains("404")))) {
loadError = true;
}
Log.i(TAG, "_________________________title________________________" + title);
}


});
if (mName != null && mName.equals(getString(R.string.map))) {
/**
* 伪装成电脑版的请求,返回的网页布局也是电脑版,
* 因为地图导航手机版对城市要求必须是有个精确的地点,
* 而电脑版不需要这么精确,直接说城市名即可
* */
settings.setUserAgentString("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0");
}
menuWeb.loadUrl(linksUrl);//linksUrl
}
private void getStatusCode(final String url) {
OkHttpUtils.get().url(url).build().execute(new Callback() {
@Override
public Object parseNetworkResponse(Response response, int id) throws Exception {
return null;
}

@Override
public void onError(Call call, Exception e, int id) {
loadError = true;
}

@Override
public void onResponse(Object response, int id) {

}
});
}


...全文
1624 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Demons_by 2017-05-18
  • 打赏
  • 举报
回复
你确实重写了这个方法,但你在这个方法里做的事情只是把flag置true了而已呀。。你看看能不能从这个方法的errorResponse参数中通过errorResponse.getStatusCode()方法得到你要的错误码
某农村小伙 2017-05-18
  • 打赏
  • 举报
回复
引用 3 楼 Demons_by 的回复:
重写这个WebViewClient类的onReceivedHttpError()方法应该可以实现你的需求,这个方法在出现加载错误的时候会被调用,你可以在这里写上自己的处理逻辑。不过这个方法需要Android的版本在21以上。。
你仔细看一下,我已经重写这个方法了,不行的
Demons_by 2017-05-09
  • 打赏
  • 举报
回复
还有,这个链接里的内容可能会对楼主有帮助。http://blog.csdn.net/zl18603543572/article/details/49688105
Demons_by 2017-05-09
  • 打赏
  • 举报
回复

重写这个WebViewClient类的onReceivedHttpError()方法应该可以实现你的需求,这个方法在出现加载错误的时候会被调用,你可以在这里写上自己的处理逻辑。不过这个方法需要Android的版本在21以上。。
某农村小伙 2017-05-09
  • 打赏
  • 举报
回复
引用 1楼MyStephenCurry 的回复:
楼主,这个问题你解决了么,我现在也有这需求,
没有
MyStephenCurry 2017-04-22
  • 打赏
  • 举报
回复
楼主,这个问题你解决了么,我现在也有这需求,

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧