Retrofit + OkHttp缓存处理的示例代码

发布时间 - 2026-01-11 03:13:31    点击率:

通过缓存处理可以有效降低服务器的负荷,加快APP界面加载速度,提升用户体验。Retrofit + OkHttp缓存处理流程是这样的,请求响应之后会在data/data/packageName/cache下建立一个response文件夹,保存缓存数据,后续请求时若无网络,则直接读取缓存内容,若有网络则从网络获取最新数据并缓存。

1.设置缓存路径,大小及添加缓存拦截器

//设置缓存路径
File httpCacheDirectory = new File(CommonApplication.getInstance().getCacheDir(), "responses");
//设置缓存 10M
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
//创建OkHttpClient,并添加拦截器和缓存代码
OkHttpClient client = new OkHttpClient.Builder()
    .addNetworkInterceptor(new CacheInterceptor(CommonApplication.getInstance()))
    .cache(cache).build();

2.定义缓存拦截器。若网络正常,则缓存有效期1分钟;若网络异常,则缓存有效期6小时

public class CacheInterceptor implements Interceptor {
  private Context mContext;
  public CacheInterceptor(Context context) {
    mContext = context;
  }
  @Override
  public Response intercept(Chain chain) throws IOException {
    Request request = chain.request();
    if (NetworkUtils.isNetworkAvailable(mContext)) {//没网强制从缓存读取(必须得写,不然断网状态下,退出应用,或者等待一分钟后,就获取不到缓存)
      request = request.newBuilder()
          .cacheControl(CacheControl.FORCE_CACHE)
          .build();
    }
    Response response = chain.proceed(request);
    Response responseLatest;
    if (NetworkUtils.isNetworkAvailable(mContext)) {
      int maxAge = 60; //有网失效一分钟
      responseLatest = response.newBuilder()
          .removeHeader("Pragma")
          .removeHeader("Cache-Control")
          .header("Cache-Control", "public, max-age=" + maxAge)
          .build();
    } else {
      int maxStale = 60 * 60 * 6; // 没网失效6小时
      responseLatest = response.newBuilder()
          .removeHeader("Pragma")
          .removeHeader("Cache-Control")
          .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
          .build();
    }
    return responseLatest;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# Retrofit  # OkHttp缓存  # Android中okhttp3.4.1+retrofit2.1.0实现离线缓存  # Android中的Retrofit+OkHttp+RxJava缓存架构使用  # 拦截器  # 是这样  # 会在  # 若有  # 建立一个  # 若无  # 大家多多  # 加载  # 断网  # 分钟后  # 状态下  # Cache  # responses  # getCacheDir  # getInstance  # CacheInterceptor  # addNetworkInterceptor  # build  # public  # OkHttpClient 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用景安虚拟主机手机版绑定域名建站?  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何创建自定义Artisan命令?(代码示例)  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  深圳网站制作的公司有哪些,dido官方网站?  html如何与html链接_实现多个HTML页面互相链接【互相】  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  大同网页,大同瑞慈医院官网?  高端建站三要素:定制模板、企业官网与响应式设计优化  在Oracle关闭情况下如何修改spfile的参数  怎么用AI帮你设计一套个性化的手机App图标?  简历没回改:利用AI润色让你的文字更专业  网站制作大概多少钱一个,做一个平台网站大概多少钱?  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  JavaScript常见的五种数组去重的方式  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  清除minerd进程的简单方法  Laravel如何处理异常和错误?(Handler示例)  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  焦点电影公司作品,电影焦点结局是什么?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  zabbix利用python脚本发送报警邮件的方法  如何在Tomcat中配置并部署网站项目?  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  如何破解联通资金短缺导致的基站建设难题?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  如何在万网自助建站平台快速创建网站?  青岛网站建设如何选择本地服务器?  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel如何与Inertia.js和Vue/React构建现代单页应用  Laravel如何实现用户注册和登录?(Auth脚手架指南)  魔方云NAT建站如何实现端口转发?  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  详解CentOS6.5 安装 MySQL5.1.71的方法  javascript日期怎么处理_如何格式化输出  Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  黑客入侵网站服务器的常见手法有哪些?  如何在 React 中条件性地遍历数组并渲染元素  Python自然语言搜索引擎项目教程_倒排索引查询优化案例