android webview 404
场景:Android WebView处理404等异常
Android WebView处理404等错误
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); } };
1 楼
zgycsmb
2011-12-16
楼主,我也遇到webview处理404的问题了,
你能发一份这demo给我吗,350038760@qq.com
你能发一份这demo给我吗,350038760@qq.com