刚刚开始学习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);
}
};
分享到:
相关推荐
当然,实际应用中可能还需要处理更多细节,比如处理不同视频格式的支持、处理视频控制(如播放、暂停、全屏等)以及错误处理等。你可以参考提供的TestPalyMediaInWebView文件来进一步理解和实践这个过程。 总的来说...
总的来说,Android通过WebView调用HTTPS涉及到许多步骤,包括设置权限、初始化WebView、处理SSL错误、启用JavaScript支持、加载URL以及处理加载进度等。理解并正确实施这些步骤,能够确保在Android应用中安全、流畅...
然而,在实际使用中,由于网络问题、页面不存在或编码错误等原因,WebView可能会加载失败。这时,我们需要对这些错误进行妥善处理,为用户提供友好的体验。本文将详细介绍如何在WebView加载失败时,自定义错误页面。...
5. 处理WebSocket事件:在Android端,监听WebSocket的状态变化,如连接打开、关闭、错误等,根据需要进行相应的操作。 6. 数据交换:通过JavaScriptInterface在Android和JavaScript之间交换数据,实现WebSocket通信...
在Android开发中,WebviewQQ登录是一种常见的社交登录方式,它允许用户通过内置的WebView组件直接使用QQ账号进行登录,并将登录后的参数回传...在实际开发中,还需要考虑到错误处理、安全问题以及用户体验优化等细节。
在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中内嵌网页,实现类似浏览器的功能。然而,有时我们需要在WebView中处理...在实际项目中,还需要考虑性能优化、错误处理和用户体验等方面的问题。
在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。本实例将详述如何使用...在实际应用中,可能还需要考虑更多的细节,如用户输入验证、网络请求错误处理、登录状态保存等。
在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中内嵌网页内容,实现混合式开发。...在实际开发中,还需要考虑用户体验、错误处理和性能优化等方面,确保功能的稳定性和易用性。
3. 其他设置:包括设置加载进度条、自定义加载页面错误处理、禁止缩放等。 **五、安全注意事项** 1. 防止跨域注入攻击:使用`WebChromeClient`或`WebViewClient`的适当重写方法来处理URL加载过程。 2. 避免注入...
在实际开发中,还需要考虑错误处理、权限管理(如请求读取存储权限)等问题。此外,为了提高用户体验,可以考虑使用`ProgressListener`跟踪上传进度,或者使用`Promise`或`async/await`结构处理异步操作。 以上就是...
Android WebView 加载网页是移动应用开发中的一项基本需求。然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 错误一:加载 HTTPS 请求的网页时,WebView ...
`WebViewClient`用于控制页面加载的行为,如拦截URL、处理错误等;`WebChromeClient`则提供了与用户界面相关的功能,如显示加载进度条、处理对话框等。 总的来说,Android WebView是开发者在应用中集成Web内容的...
8. **自定义WebView功能**:通过重写WebViewClient和WebChromeClient的方法,可以实现如加载进度提示、页面跳转控制、自定义加载错误处理等功能。 9. **安全考虑**:使用WebView时,务必注意网络安全,避免加载恶意...
通过以上步骤,我们就成功地实现了在Android的WebView中进行图片缓存、替换加载前的默认图片样式以及图片点击事件的处理。这不仅提升了用户体验,还能有效地减少网络资源的消耗。同时,这些技术也可以作为基础,...
不过,实际开发中可能还需要考虑其他因素,如网页加载进度的显示、设置自定义加载错误页面、处理JavaScript与Java之间的交互等。这些更高级的功能可以通过进一步研究WebView的相关API和特性来实现。
此外,为了提高用户体验,你可能需要实现一些额外功能,比如进度条显示、页面加载错误处理、以及支持文件的下载和分享。X5WebView提供了丰富的API,可以监听加载事件、执行JavaScript、注入CSS等。 总之,"Android ...
在实际项目中,我们可能还需要处理一些额外的逻辑,例如监听下载进度、处理下载错误、检查SDCARD是否可用等。同时,为了兼容Android 6.0及更高版本的运行时权限管理,我们需要在运行时请求写入外部存储的权限: ```...
通过以上知识点的掌握和实践,开发者可以充分利用WebView构建功能丰富的Android应用,包括但不限于内置浏览器、阅读器、富文本编辑器等。同时,随着Android版本的更新,WebView也在不断优化,支持更多的功能和更好的...
在Android应用开发中,WebView是一个非常重要的组件,它允许我们加载和显示网页内容。这篇教程将详细介绍如何在Android中利用WebView来调用H5页面,从而实现摄像头扫描二维码的功能。 首先,我们需要理解WebView的...