刚刚开始学习Android开发,遇到一个场景,使用WebView来嵌入Wap页面,从而达到共享Wap组件的效果。初试了下,发现WebView无法截获404,500等错误,这个感觉很不方便,难道WebView截获WebKit的返回结果进行相应的操作这么复杂吗?不太理解WebView为什么没有封装出更丰富的Http response code的处理回调接口。然而如果用WebView我想404等错误的处理是必不可少的,毕竟我们嵌入的是人家的网页,不能保证一定是正常的。想了下有2个办法可以做到对返回错误结果的捕获和处理:
1. 看源代码,分析WebView封装webkit的原理,在学习一下webkit的错误处理机制,从而扩展WebView增加回调处理404等错误的功能。
2. 在WebView加载页面之前,使用HttpClient的HttpHead来获取访问url的相应头,如果有错就不加载。
由于是新手,我想第一个办法肯定比较困那,就是熟手也不一定能在短时间内搞定,还是选择第2个办法。
简单的判断代码如下:
/**
* 检查url返回内容是否有效
* @param url
* @return
*/
private boolean validStatusCode(String url) {
if (this.mHttpClient == null) {
this.mHttpClient = HttpUtils.createHttpClient();
}
try {
HttpHead httpGet = new HttpHead(url);
HttpResponse response = mHttpClient.execute(httpGet);
int statusCode = response.getStatusLine().getStatusCode();
String str = String.valueOf(statusCode);
if (str.startsWith("4") || str.startsWith("5")) {
return false;
}
return true;
} catch (Exception e) {
Log.e(TAG, e.getMessage(),e);
}
return false;
}
对于上面代码中的HttpUtils.createHttpClient()方法,就不列出了,就是创建一个HttpClient对象。
当然还有一点需要注意就是,通过HttpHead访问网络的时候,需要结合使用Handler的机制来处理返回结果,以便在UI线程里面更新页面的显示。于是可以在一个新的线程里面来做网络的访问请求:
public class CheckThread extends Thread{
@Override
public void run() {
boolean ifValid = validStatusCode(REG_URL);
Message msg = new Message();
Bundle bundle = new Bundle();
bundle.putBoolean("validResponse", ifValid);
msg.setData(bundle);
mHandler.sendMessage(msg);
}
}
最后实现Handler来处理HttpHead的请求结果来刷新UI展现:
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bundle bundle = msg.getData();
boolean validResponse = bundle.getBoolean("validResponse");
if(validResponse) {
createWebView();
} else {
handlerError();
}
super.handleMessage(msg);
}
};
分享到:
相关推荐
webview加载失败,自定义错误页面处理
但是android的webview默认支持的功能非常弱,很多地方都是需要自定义的,才能达到我们想要的效果。并且webview在不同的版本会有不同程度的bug。下面小编把webview经常出现的问题给大家整理如下: 1.为WebView自定义...
Android 4.4 WebView使用实例,实现后退、前进、刷新、错误处理等功能。完成项目,可直接eclipse运行。有WebViewClient常用方法注释,WebChromeClient常用方法注释。
最近做无线WiFi的时候,在最后认证成功的时候会弹出一个广告页,于是用webview去加载了一下,结果没反应,打印url出来看了一下,发现是https格式的,在使用WebView加载https资源文件时,如果认证证书不被Android认可...
Android Webview上的ssl warning的处理方式详解 前言: 因为最近遇到google pay上汇报的安全漏洞问题,需要处理ssl warning. 安全提醒 您的应用中 WebViewClient.onReceivedSslError 处理程序的实施方式很不安全。...
PrimWeb 是一个代理的WebView基于的 Android WebView 和 腾讯 x5 WebView,容易、灵活使用以及功能非常强大的库,提供了 WebView 一系列的问题解决方案 ,并且轻量和灵活, 更方便 webview 的切换. What Support? ...
需要如何处理呢?我们需要用UrlEncoder编码为#, %, ', ? 。可以使用以下两种代码,data为string类型的html代码1、webView.loadData(URLEncoder.encode(data, “utf-8”), “text/html”, “utf-8”);这样一些背景...
用于探索 Android 系统 WebView 崩溃处理程序行为的测试应用程序 此应用程序中有 3 个按钮。 Hook - 安装一个链接信号处理程序,在 SIGSEGV 上记录一条消息 WebView - 实例化一个 WebView,以便注册 Android 系统 ...
开发工具:android studio 注意:部分网站可能不兼容自行百度修改 第二版:在原有基础上处理了网页部分按钮无法点击的情况,修复了无法播放网页提示音的情况,修复了无法使用上传图片的情况(之前点击上传无反应,...
从微信jsBridge文件中得到启发和修改,并修复了一些错误并增强了功能。 该项目在Java和JavaScript之间架起了一座桥梁。 它提供了一种安全便捷的方法,可以从js调用Java代码和从java调用js代码。 演示版 用法 ...
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面 ...
检测项域名(Hostname)验证不严格Webview证书错误未处理命令注入/动态加载TrustManager未进行证书校验MD2,MD4,MD5弱信息摘要算法使用SHA-1弱信息摘要算法错误字符转换DES / DESede使用RSA Nopadding RSA密钥长度...
#JsBridge 从微信jsBridge文件中得到启发和修改,并修复了一些错误并增强了功能。 该项目在Java和JavaScript之间架起了一座桥梁。 它提供了从js调用Java代码和从java调用js代码的安全便捷方法。演示版用法JitPack.io...
可在上购买该应用程序包含一个WebView,该WebView包装了主要的 javascript网络应用程序,并处理与Google Play服务的交互。开发指南git clone https://github.com/silleknarf/notebook-numbers-android cd notebook-...
这个Android应用程式是的包装,具有错误处理,本地化,页面加载和导航控制功能。 该应用程序是使用构建的。 默认操作系统WebView也有一个后备片段。 项目依赖 为了构建项目并对其进行调试,必须在本地Maven存储库中...
支持所有主要浏览器,从IE6到Opera,Android Webview以及介于两者之间的所有位置。 并非所有浏览器都支持对错误对象的堆栈跟踪,但是TraceKit会挤出尽可能多的有用信息并将其标准化。 缩小3kB +压缩 安装 bower ...