`
youngerbaby
  • 浏览: 114970 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android WebView处理404等错误

 
阅读更多

刚刚开始学习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);
		}
	};
 
分享到:
评论
2 楼 stringsdn 2015-08-31  
不懂 你在加载前判断没有404 到加载后是404怎么半
1 楼 zgycsmb 2011-12-16  
楼主,我也遇到webview处理404的问题了,
你能发一份这demo给我吗,350038760@qq.com

相关推荐

    android webview播放网页视频

    当然,实际应用中可能还需要处理更多细节,比如处理不同视频格式的支持、处理视频控制(如播放、暂停、全屏等)以及错误处理等。你可以参考提供的TestPalyMediaInWebView文件来进一步理解和实践这个过程。 总的来说...

    Android通过WEBVIEW调用HTTPS

    总的来说,Android通过WebView调用HTTPS涉及到许多步骤,包括设置权限、初始化WebView、处理SSL错误、启用JavaScript支持、加载URL以及处理加载进度等。理解并正确实施这些步骤,能够确保在Android应用中安全、流畅...

    WebView加载失败错误处理

    然而,在实际使用中,由于网络问题、页面不存在或编码错误等原因,WebView可能会加载失败。这时,我们需要对这些错误进行妥善处理,为用户提供友好的体验。本文将详细介绍如何在WebView加载失败时,自定义错误页面。...

    Android-WebSocket-WebView_DEMO_websocket_androidwebview_

    5. 处理WebSocket事件:在Android端,监听WebSocket的状态变化,如连接打开、关闭、错误等,根据需要进行相应的操作。 6. 数据交换:通过JavaScriptInterface在Android和JavaScript之间交换数据,实现WebSocket通信...

    Android webview QQ一键登录并向后台返回参数

    在Android开发中,WebviewQQ登录是一种常见的社交登录方式,它允许用户通过内置的WebView组件直接使用QQ账号进行登录,并将登录后的参数回传...在实际开发中,还需要考虑到错误处理、安全问题以及用户体验优化等细节。

    android webview上传文件

    在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中内嵌网页,实现类似浏览器的功能。然而,有时我们需要在WebView中处理...在实际项目中,还需要考虑性能优化、错误处理和用户体验等方面的问题。

    android的webView的登录实例

    在Android开发中,WebView是一个非常重要的组件,它允许我们在应用程序中加载和显示网页内容。本实例将详述如何使用...在实际应用中,可能还需要考虑更多的细节,如用户输入验证、网络请求错误处理、登录状态保存等。

    Android webview 上传图片

    在Android开发中,WebView是一个非常重要的组件,它允许我们在原生应用中内嵌网页内容,实现混合式开发。...在实际开发中,还需要考虑用户体验、错误处理和性能优化等方面,确保功能的稳定性和易用性。

    Android WebViewJS应用源码.zip

    3. 其他设置:包括设置加载进度条、自定义加载页面错误处理、禁止缩放等。 **五、安全注意事项** 1. 防止跨域注入攻击:使用`WebChromeClient`或`WebViewClient`的适当重写方法来处理URL加载过程。 2. 避免注入...

    Android webview打开相册选择图片并上传到服务器,(亲测可用)

    在实际开发中,还需要考虑错误处理、权限管理(如请求读取存储权限)等问题。此外,为了提高用户体验,可以考虑使用`ProgressListener`跟踪上传进度,或者使用`Promise`或`async/await`结构处理异步操作。 以上就是...

    详解android 用webview加载网页(https和http)

    Android WebView 加载网页是移动应用开发中的一项基本需求。然而,在加载 HTTPS 和 HTTP 网页时,WebView 可能会出现一些问题,本文将详细介绍这两个错误的解决方法。 错误一:加载 HTTPS 请求的网页时,WebView ...

    Android WebView 之Helloworld

    `WebViewClient`用于控制页面加载的行为,如拦截URL、处理错误等;`WebChromeClient`则提供了与用户界面相关的功能,如显示加载进度条、处理对话框等。 总的来说,Android WebView是开发者在应用中集成Web内容的...

    android webview demo

    8. **自定义WebView功能**:通过重写WebViewClient和WebChromeClient的方法,可以实现如加载进度提示、页面跳转控制、自定义加载错误处理等功能。 9. **安全考虑**:使用WebView时,务必注意网络安全,避免加载恶意...

    Android实现WebView图片缓存,替换加载前默认图片的样式

    通过以上步骤,我们就成功地实现了在Android的WebView中进行图片缓存、替换加载前的默认图片样式以及图片点击事件的处理。这不仅提升了用户体验,还能有效地减少网络资源的消耗。同时,这些技术也可以作为基础,...

    Android中WebView返回到上一个网页

    不过,实际开发中可能还需要考虑其他因素,如网页加载进度的显示、设置自定义加载错误页面、处理JavaScript与Java之间的交互等。这些更高级的功能可以通过进一步研究WebView的相关API和特性来实现。

    Android 基于x5Webview 浏览文件 office文档

    此外,为了提高用户体验,你可能需要实现一些额外功能,比如进度条显示、页面加载错误处理、以及支持文件的下载和分享。X5WebView提供了丰富的API,可以监听加载事件、执行JavaScript、注入CSS等。 总之,"Android ...

    android webview实现自身下载文件自动保存SDCARD

    在实际项目中,我们可能还需要处理一些额外的逻辑,例如监听下载进度、处理下载错误、检查SDCARD是否可用等。同时,为了兼容Android 6.0及更高版本的运行时权限管理,我们需要在运行时请求写入外部存储的权限: ```...

    android WebView控件的使用

    通过以上知识点的掌握和实践,开发者可以充分利用WebView构建功能丰富的Android应用,包括但不限于内置浏览器、阅读器、富文本编辑器等。同时,随着Android版本的更新,WebView也在不断优化,支持更多的功能和更好的...

    Android使用WebView调用H5完成摄像头扫描二维码

    在Android应用开发中,WebView是一个非常重要的组件,它允许我们加载和显示网页内容。这篇教程将详细介绍如何在Android中利用WebView来调用H5页面,从而实现摄像头扫描二维码的功能。 首先,我们需要理解WebView的...

Global site tag (gtag.js) - Google Analytics