专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
开发者全社区  ·  瓜,某董事长的QF们 ·  昨天  
开发者全社区  ·  梁文锋的北京办公室,步行可到清北 ·  昨天  
开发者全社区  ·  WC!阿里P7总包超150w ·  昨天  
开发者全社区  ·  雷军吓尿了 ·  2 天前  
开发者全社区  ·  某基金「偷吃」? ·  3 天前  
51好读  ›  专栏  ›  郭霖

Android WebView拦截请求详解

郭霖  · 公众号  · android  · 2016-09-29 08:00

正文

今日科技快讯

著名的电动汽车公司特斯拉相信大家都耳熟能详,不过有很多人可能并不知道,特斯拉的CEO埃隆·马斯克手上还掌握着一家太空探索公司,SpaceX。由于埃隆·马斯克所研究的技术都太过于前卫,因此他个人也是被赠予了“硅谷钢铁侠”的美誉。近日,埃隆·马斯克在国际宇航大会上公布了SpaceX的火星登陆计划,将通过飞船把人类送上火星,预计最早在2025年就能实现这一目标。马斯克还称,这一计划完成之后,人类可以用40-100年的时间实现对火星的殖民,重建一个新的文明社会。

作者简介

本篇来自 xingfeng_coder 的投稿,算是 WebView 的一个知识点,读完大概5分钟,希望大家喜欢。

xingfeng_coder 的博客地址:

http://blog.csdn.net/qq_19431333

WebView基本用法

WebView 的基本用法相信大多数 Android开发者 都是会使用的,最简单的就是调用个 loadUrl 方法,但是记得要在清单文件中添加网络权限。我也简单了写了一个加载百度的,如下图:


代码如是:

这是WebView最简单的使用了。

WebView拦截请求

WebView 调用 loadUrl 后,会首先根据传入的URL获取响应,然后再将响应显示到页面上,这就是 WebView 的原理。那么我们可以在获取响应过程中重新改变请求URL或者直接将响应替换。

而具体的替换在 WebViewClient 的:

WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)

方法中,该方法用于根据请求去获取响应,如果返回null,那么android会根据请求去获取响应并返回,但是如果你重写了该方法并返回了响应,那么 WebView 就会使用你的响应数据。其中 WebResourceRequet 封装了请求, WebResourceResponse 封装了响应。

使用静态响应

既然知道了原理,那就试一下,先上代码和效果。

这段代码直接将响应换成了上面的一段html文字。效果如下:

代码中重写了两个 shouldInterceptRequest 方法,其中一个 WebResourceResponse shouldInterceptRequest (WebView view, String url) API 21过时 了。

响应使用网络资源

shouldInterceptRequest 方法API还有介绍,该方法是在非UI线程中,所以当需要与 View 系统交互时需要小心。既然是在非UI线程中,那么我们可以放在在其中做网络请求,比如获取 www.importnew.com 的响应数据,将 百度 替换为 importnew。



注意: WebView 中调用的每个请求都会经过那个拦截器,所以如果一个页面中又有超链接,那么依然会经过那个拦截器,所以上面 Importnew 中有些图片没有加载出来。因为我是以本文形式获取响应的。并且是以 utf-8 作为编码的,所以有时会出现乱码。

应用






请到「今天看啥」查看全文


推荐文章
开发者全社区  ·  瓜,某董事长的QF们
昨天
开发者全社区  ·  梁文锋的北京办公室,步行可到清北
昨天
开发者全社区  ·  WC!阿里P7总包超150w
昨天
开发者全社区  ·  雷军吓尿了
2 天前
开发者全社区  ·  某基金「偷吃」?
3 天前
形色识花  ·  过年了,怎么能不送你小礼物!
8 年前
中国新闻周刊  ·  经济危机下的人性,密封容器里的爱情
7 年前