需求情景:
由于H5有个接口请求的数据很大,所以直接在本地缓存了该接口的json数据文本;
现在通过拦截H5该接口,直接实用本地缓存数据;方法如下
【重点需要关注的方法
WebResourceResponse(String mimeType,String encoding,int statusCode,String reasonPhrase,Map<String,String> responseHeaders,InputStream data)
@Override
public WebResourceResponse shouldInterceptRequest(WebView webView, WebResourceRequest request) {
Uri uri = request.getUrl();
String path = uri.getPath();//仅路径,不带参数
Log.d("cut","Request uri拦截路径uri::"+uri);
if (uri.toString().contains("homead3.do")){//拦截到H5的网络请求
try {
String localTargetRes = FileUtils.INSTANCE.getSDPath()+Constant.LOCAL_FOLDER_ROOT_CONTENT_PATH + File.separator+ uri.getAuthority()+File.separator+"homead3.do";
Log.d("cut","Request 替换的数据文本::"+localTargetRes);
Map<String,String> map = new HashMap<>();
map.put("Access-Control-Allow-Origin","*");
map.put("Access-Control-Allow-Headers","Content-Type");
WebResourceResponse resourceResponse = new WebResourceResponse("application/javascript", "UTF-8",200,"",map,new FileInputStream(new File(localTargetRes)));
return resourceResponse;
} catch (Exception e) {
e.printStackTrace();
return null;//异常情况,直接访问网络资源
}
}
}
对于低版本api走的是
public WebResourceResponse shouldInterceptRequest(WebView webView, String url)这个方法的目前本人还没找到,有高手知道的麻烦告知一下,谢谢