Okhttp 插入缓存拦截器 解析
我们在做网络请求的时候,如果网络请求过于频繁而且请求的数据变动不大,或者基本没有变动,这个时候如果没有缓存功能,我们想一下
会浪费掉多少资源,一次请求刷新一次,去请求一次,不但会消耗用户的流量,而且还对服务端造成不必要的网络压力(当然如果服务器牛逼那么无所谓(*^__^*) )
所以除了自己做缓存以外okhttp自己也有一套缓存的机制
那就是继承Interceptor接口
我们先下okhttp中 Interceptor的介绍
/*** Observes, modifies, and potentially short-circuits requests going out and the corresponding* responses coming back in. Typically interceptors add, remove, or transform headers on the request* or response.*/
他的大概意思就是 观察,修改,并且使相应的请求走出去,通常添加这个拦截器去添加,移除,或者转换这个请求或者返回的的header 头部信息。
所以这个拦截器的作用就是去修改请求或者返回的头部信息。
那么为什么修改头部信息的拦截器就能做到缓存呢?
我们先看一个包含首部的Http Entry
http://google.com/foo GET 2 Accept-Language: fr-CA Accept-Charset: UTF-8 HTTP/1.1 200 OK 3 Content-Type: image/png Content-Length: 100 Cache-Control: max-age=600
可以看到头部信息有一个Cache-Control缓存控制
我们可以通过设置这个对Http请求进行缓存设置
下面直接看这个类吧(非自己编写,但是忘了作者的地址)
public class CacheInterceptor implements Interceptor {private Context mContext;@Overridepublic Response intercept(Chain chain) throws IOException {Request request = chain.request();//获取请求//这里就是说判读我们的网络条件,要是有网络的话我么就直接获取网络上面的数据,要是没有网络的话我么就去缓存里面取数据if(Utils.GetConnectType(mContext) == Constant.NetworkStatus.DisConnect){request = request.newBuilder()//这么写就是只从缓存取 .cacheControl(CacheControl.FORCE_CACHE).build();LogUtils.v("CacheInterceptor\",\"no network\"");}Response orginalResponse = chain.proceed(request);//有网络的条件下if(Utils.GetConnectType(mContext) != Constant.NetworkStatus.DisConnect){String cacheControl = request.cacheControl().toString();return orginalResponse.newBuilder()//这里设置的为0就是说不进行缓存,我们也可以设置缓存时间.header("Cache-Control", "public, max-age=" + 0).removeHeader("Pragma").build();}else{int maxTime = 4*24*60*60;return orginalResponse.newBuilder()//这里的设置的是我们的没有网络的缓存时间,想设置多少就是多少。.header("Cache-Control", "public, only-if-cached, max-stale="+maxTime).removeHeader("Pragma").build();}}public CacheInterceptor(Context context){this.mContext = context;}}
类里面分别对无网络情况,和有网络情况进行了一个区分,无网络情况下我们在缓存中取,有网络条件下直接进行请求并且还可以设置缓存时间
转载于:https://www.cnblogs.com/fengfenghuifei/p/8065087.html
Okhttp 插入缓存拦截器 解析相关推荐
- LindAgile~缓存拦截器支持类的虚方法了
写它的原因 之前写过一个缓存拦截器,主要在方法上添加CachingAspect特性之后,它的返回值就可以被缓存下来,下次访问时直接从缓存中返回结果,而它有一个前提,就是你的方法需要是一个接口方法,缓存 ...
- 添加拦截器解析用户信息
已登录购物车 接下来,我们完成已登录购物车. 在刚才的未登录购物车编写时,我们已经预留好了编写代码的位置,逻辑也基本一致. 添加登录校验 购物车系统只负责登录状态的购物车处理,因此需要添加登录校验,我 ...
- 这次使用一个最舒服的姿势插入HttpClient拦截器技能点
码甲哥继续在同程艺龙写一点大前端,今天我们来了解一下如何拦截axios请求/响应?这次我们举一反三,用一个最舒适的姿势插入这个技能点. 本文阅读耗时5 minute,行文耗时5 Days. axios ...
- Android Retrofit通过OkHttp设置Interceptor拦截器统一打印请求报文及返回报文
我们先定义一个打印报文的拦截器,继承Interceptor public class LogInterceptor implements Interceptor {private static fin ...
- Spring Cloud Open Feign系列【23】OAuth2FeignRequestInterceptor、BasicAuthRequestInterceptor拦截器解析
有道无术,术尚可求,有术无道,止于术. 资料整理来自网络 文章目录 BasicAuthRequestInterceptor Basic 认证 使用案例 源码 OAuth2FeignRequestInt ...
- okhttp缓存拦截器应用
之前只是听说缓存,今天我自己也尝试了一下 ,运用了单例模式,我其实对这些都不是很熟悉,我就是学到哪记录到哪,如果有不对的地方,希望各位指教. package com.silent.fuxiokhttp ...
- 网络请求框架OkHttp4的使用与原理解析01:任务调度与拦截器分析
OkHttp任务调度流程: 1. OkHttpClient构建过程分析 案例: OkHttpClient client = new OkHttpClient.Builder().addIntercep ...
- OkHttp(二)—— 拦截器
本篇文章我们将介绍 OkHttp 的拦截器,拦截器是 OkHttp 的核心,正是因为 OkHttp 内置的五大拦截器各司其职,才使得使用者可以轻松的发送网络请求并收到响应.这五大拦截器分别是: 重定向 ...
- OKHttp五大拦截器
文章目录 [1]五大拦截器总体概述 一.责任链设计模式 ①定义: ②为什么要使用责任链模式 [2]拦截器的工作流程 一.默认的5大拦截器有哪些? [3]RetryAndFollowUpIntercep ...
最新文章
- ajaxsetup无效_Ajax请求session失效该如何解决
- word排版案例报告_停工不停学丨项目部开展Word办公软件使用技能培训
- 怎么用PHP建立购物网站,如何使用PHP建设一个购物网站
- linux下进程监听端口,linux下查看监听端口对应的进程
- lombok之@RequiredArgsConstructor注解
- 如何实现分布式锁?赶紧收藏备战金三银四!
- AcWing提高算法课Level-3 第六章 基础算法
- c语言给出太多参数,C语言中不定参数的实现
- 客户信息管理系统类毕业论文文献有哪些?
- 同时定位与地图创建综述
- python中encode函数_python中文处理之encode/decode函数
- linux下移植mplayer播放器
- 《经济学通识》一、前言
- Linux键盘输入读取
- tf 2.0 -- Model -- 模型
- 辉芒微IO单片机FT60F011A-RB
- canvas快速实现视频的一键截图功能
- Java 中的三目运算符
- 手机中的那些人机交互都是怎么实现的
- 汉字区位码\国标码\机内码之间的换算
热门文章
- 动词变名词的变化规则_动词过去式变化规则 - 点评英语网
- UnityShader RenderTypeQueue 渲染顺序
- 受限玻尔兹曼机准备知识——MCMC方法和Gibbs采样
- CF2B The least round way(贪心+动规)
- CentOS6找回root密码 - 黑猴子
- TP3.2设置URL伪静态满足更好的SEO效果
- KVM安装、镜像创建(一)
- 如何快糙好猛的使用Shiqi.Yu老师的公开人脸检测库(附源码)
- Linq 数据库操作(增删改查)
- Heka:Go编写,来自Mozilla,高效、灵活的插件式数据挖掘工具(转)