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.     };  
时间: 2024-09-10 20:49:08

Android WebView处理404等错误的相关文章

Android webview 遇到android.os.FileUriExposedException错误解决办法

Android webview 遇到android.os.FileUriExposedException错误解决办法 1. 在 Manifest 文件中添加: <manifest ...> <application ...> <provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.provider&

Android WebView使用方法详解 附js交互调用方法_Android

目前很多Android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优点: --可以直接显示和渲染web页面,直接显示网页 --webview可以直接用html文件(网络上或本地assets中)作布局 --和JavaScript交互调用  一.基本使用 首先layout中即为一个基本的简单控件: <WebView android:id="@+id/webView

Android WebView使用方法详解 附js交互调用方法

目前很多Android app都内置了可以显示web页面的界面,会发现这个界面一般都是由一个叫做WebView的组件渲染出来的,学习该组件可以为你的app开发提升扩展性. 先说下WebView的一些优点: --可以直接显示和渲染web页面,直接显示网页 --webview可以直接用html文件(网络上或本地assets中)作布局 --和JavaScript交互调用 一.基本使用 首先layout中即为一个基本的简单控件: <WebView android:id="@+id/webView1

Android Webview使用和遇到过的坑总结

本文讲的是Android Webview使用和遇到过的坑总结,WebView 用来显示网页的一个View,它使用WebKit渲染引擎显示web页面,可以加载在线的或者本地的html页面,WebView可以对页面进行一系列操作,如历史页面的向前.向后,放大和缩小,执行文本搜索,与JS交互等等; 在使用Webview时,请记得在AndroidManifest.xml文件中声明INTERNET权限: <uses-permission android:name="android.permissio

Android WebView控件捕获用户输入的信息_Android

WebView可所谓是Android中最强大的控件之一,无所不能. 于是有这么一个需求,用户在app之中内嵌的WebView中输入帐号密码的时候,App需要捕获已经输入的帐号密码. 当用户输入帐号密码,一般情况下会进行页面转跳,在页面转跳之前执行js脚本,通过js脚本来获取这个帐号密码的value值.要先获取各个元素的class值,需要解析整个html页面,那么我们可以重写 onLoadResource 这个方法,代码如下: webview.setWebViewClient(new WebVie

android webview加载服务器上js自动轮播图片不显示问题,求大神帮忙

问题描述 android webview加载服务器上js自动轮播图片不显示问题,求大神帮忙 这个是手机版网站地址:m.daxuepai.com.cn 正常打开首页应该有轮播图片,如下图: 轮播功能是做web前端的人用js写的. 以下是我android中的代码,主要就是用webview加载了相应地址的资源,但是我加载了后那个轮播图就没有显示,代码如下: package com.example.testwebkit; import android.app.Activity; import andro

Android WebView 无法打开天猫页面

欢迎转载,但请务必注明出处! http://ryanhoo.github.io/blog/2014/09/17/android-webview-setdomstorageenabled Android WebView 突然无法打开天猫的详情页,一直停留在加载状态.而在此之前,应用里是完全可以正常访问的,通过搜索,找到解决方法,简单设置一行代码 webView.getSettings().setDomStorageEnabled(true) 即可解决问题,但背后的原因又是什么呢? 我们不能只是做解

国内爆出的Android WebView安全漏洞会导致大量应用成为黑客管道

摘要: 创新工场旗下的上网快鸟向 36氪 透露,近期国内爆出的Android WebView安全漏洞会导致大量应用成为黑客管道.漏洞危及超过90%的安卓手机,当用户通过存在漏洞的APP打开挂马网页后,可被 创新工场旗下的上网快鸟向36氪透露,近期国内爆出的Android WebView安全漏洞会导致大量应用成为黑客管道.漏洞危及超过90%的安卓手机,当用户通过存在漏洞的APP打开挂马网页后,可被大规模利用,包括远程操控手机窃取隐私.扣费等. 根据上网快鸟联合创始人姜向前的介绍,该漏洞的原理是在A

Android WebView安全漏洞会导致大量应用成为黑客管道

摘要: 创新工场旗下的上网快鸟向 36氪 透露,近期国内爆出的Android WebView安全漏洞会导致大量应用成为黑客管道.漏洞危及超过90%的安卓手机,当用户通过存在漏洞的APP打开挂马网页后,可被 创新工场旗下的上网快鸟向36氪透露,近期国内爆出的Android WebView安全漏洞会导致大量应用成为黑客管道.漏洞危及超过90%的安卓手机,当用户通过存在漏洞的APP打开挂马网页后,可被大规模利用,包括远程操控手机窃取隐私.扣费等. 根据上网快鸟联合创始人姜向前的介绍,该漏洞的原理是在A