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个办法。

 

简单的判断代码如下:

Java代码   收藏代码
  1. /** 
  2.      * 检查url返回内容是否有效 
  3.      * @param url 
  4.      * @return 
  5.      */  
  6.     private boolean validStatusCode(String url) {  
  7.         if (this.mHttpClient == null) {  
  8.             this.mHttpClient = HttpUtils.createHttpClient();  
  9.         }  
  10.   
  11.         try {  
  12.             HttpHead httpGet = new HttpHead(url);  
  13.             HttpResponse response = mHttpClient.execute(httpGet);  
  14.             int statusCode = response.getStatusLine().getStatusCode();  
  15.             String str = String.valueOf(statusCode);  
  16.             if (str.startsWith("4") || str.startsWith("5")) {  
  17.                 return false;  
  18.             }  
  19.             return true;  
  20.         } catch (Exception e) {  
  21.             Log.e(TAG, e.getMessage(),e);  
  22.         }   
  23.         return false;  
  24.     }  

 对于上面代码中的HttpUtils.createHttpClient()方法,就不列出了,就是创建一个HttpClient对象。

 

当然还有一点需要注意就是,通过HttpHead访问网络的时候,需要结合使用Handler的机制来处理返回结果,以便在UI线程里面更新页面的显示。于是可以在一个新的线程里面来做网络的访问请求:

Java代码   收藏代码
  1. public class CheckThread extends Thread{  
  2.         @Override  
  3.         public void run() {  
  4.             boolean ifValid = validStatusCode(REG_URL);  
  5.             Message msg = new Message();  
  6.             Bundle bundle = new Bundle();  
  7.             bundle.putBoolean("validResponse", ifValid);  
  8.             msg.setData(bundle);  
  9.             mHandler.sendMessage(msg);  
  10.         }  
  11.     }  

 最后实现Handler来处理HttpHead的请求结果来刷新UI展现:

Java代码   收藏代码
  1. private Handler mHandler  = new Handler() {  
  2.         @Override  
  3.         public void handleMessage(Message msg) {  
  4.             Bundle bundle = msg.getData();  
  5.             boolean validResponse = bundle.getBoolean("validResponse");  
  6.             if(validResponse) {  
  7.                 createWebView();  
  8.             } else {  
  9.                 handlerError();  
  10.             }  
  11.             super.handleMessage(msg);  
  12.         }  
  13.     };  
相关文章
|
6月前
|
API Android开发 数据安全/隐私保护
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
234 0
|
2月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
25 0
|
4月前
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
126 0
|
4月前
|
XML Android开发 数据格式
安卓和webview交互
安卓和webview交互
57 1
|
5月前
|
定位技术 Android开发
[√]Android webview的url scheme
[√]Android webview的url scheme
408 0
|
5月前
|
小程序 Android开发 iOS开发
在钉钉小程序中安卓无法打开webview
在钉钉小程序中安卓无法打开webview
114 1
|
12月前
|
Android开发 iOS开发 UED
Android webView 实现阻尼回弹效果
iOS webView默认滑动到顶部或者底部的时候,还可以继续通过手指拉扯滑动,松手后回弹;而Android webView默认是不行的,要实现跟iOS一样的效果,就需要自定义webView。
358 0
|
6月前
|
JavaScript 前端开发 Android开发
Android AgentWeb WebView 与js交互总结
Android AgentWeb WebView 与js交互总结
182 0
|
8月前
|
JavaScript 前端开发 Android开发
Android 中WebView的使用详解
Android 中WebView的使用详解
235 0
|
10月前
|
前端开发 API 定位技术
Android webview加载https链接错误或无响应
Android webview加载https链接错误或无响应