有没有适当的解释如何添加缓存和ETAG / If-None-Match支持到Retrofit OkHttp?

我正在努力在2个项目中添加Etag支持,如果起初我怀疑HTTP头可能有问题,另一个项目的一切设置正确,并且缓存仍然无法正常工作.

以下是我尝试使其工作的尝试.结果显示,缓存似乎在应用程序的同一个实例中正常工作,但是一旦我重新启动,一切都会重新加载.

此外,在我的日志中,我没有看到If-None-Match被添加到请求中,所以我认为服务器不知道ETag,并且仍然完全重新计算响应.

以下是一些代码示例:

public class RetrofitHttpClient extends UrlConnectionClient

{

private OkUrlFactory generateDefaultOkUrlFactory()

{

OkHttpClient client = new com.squareup.okhttp.OkHttpClient();

try

{

Cache responseCache = new Cache(baseContext.getCacheDir(), SIZE_OF_CACHE);

client.setCache(responseCache);

}

catch (Exception e)

{

Logger.log(this, e, "Unable to set http cache");

}

client.setConnectTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);

client.setReadTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);

return new OkUrlFactory(client);

}

private final OkUrlFactory factory;

public RetrofitHttpClient()

{

factory = generateDefaultOkUrlFactory();

}

@Override

protected HttpURLConnection openConnection(retrofit.client.Request request) throws IOException

{

return factory.open(new URL(request.getUrl()));

}

}

然后使用FULL日志级别和自定义标签创建Rest适配器:

restAdapter = new RestAdapter.Builder()

.setClient(new RetrofitHttpClient())

.setEndpoint(Config.BASE_URL)

.setRequestInterceptor(new SignatureSetter())

.setConverter(new JacksonConverter(JsonHelper.getObjectMapper()))

.setLogLevel(RestAdapter.LogLevel.FULL)

.setLog(new AndroidLog("=NETWORK="))

.build();

我在应用程序的第一个屏幕上有一个很长的请求进行测试.

当我打开应用程序 – 完成请求需要7秒钟.如果我暂停和恢复应用程序 – 相同的请求需要250ms,清楚地击中缓存.如果我完全关闭应用程序并重新启动 – 它再次需要7秒钟.

更新:

如所建议的,我使用了一个自定义的Retrofit构建并附加了一个LoggingInterceptor.这是我得到的

Received response for *** in 449,3ms

Date: Wed, 07 Jan 2015 09:02:23 GMT

Server: Apache

X-Powered-By: PHP/5.4.31

Access-Control-Allow-Credentials: true

Pragma:

Cache-Control: public, max-age=3600

X-Frame-Options: SAMEORIGIN

Etag: "hLxLRYztkinJAB453nRV7ncBSuU=-gzip"

Last-Modified: Wed, 24 Dec 2014 13:09:04 GMT

Vary: Accept-Encoding

Content-Encoding: gzip

Keep-Alive: timeout=2, max=100

Connection: Keep-Alive

Transfer-Encoding: chunked

Content-Type: application/json; charset=UTF-8

OkHttp-Selected-Protocol: http/1.1

OkHttp-Sent-Millis: 1420621288104

OkHttp-Received-Millis: 1420621288554

Sending request **** on Connection{****:80, proxy=DIRECT@ hostAddress=**** cipherSuite=none protocol=http/1.1}

Accept: application/json;

Host: ****

Connection: Keep-Alive

Accept-Encoding: gzip

User-Agent: okhttp/2.2.0

Response is equal to described above

如您所见,下一个请求中不存在If-None-Match标题

etag android,android – 改装ETAG和缓存相关推荐

  1. android 内部存储 清空,Android清空应用内部文件缓存

    Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用 ...

  2. Android中图片的三级缓存策略

    在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...

  3. android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...

    总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及工具类(下载管理.静默安 ...

  4. Android 系统(173)---Android中图片的三级缓存

    Android中图片的三级缓存 为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量 ...

  5. Android Glide数据更新及内存缓存、硬盘缓存清理

    [转] 原文                                         Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...

  6. Android okHttp网络请求之缓存控制Cache-Control

    前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...

  7. Android学习系列(27)--App缓存管理

    随笔- 53 文章- 10 评论- 1064 Android学习系列(27)--App缓存管理 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户. ...

  8. Android视频点播-边播边缓存-方案

    Android视频点播-边播边缓存-方案 简述 一些知名的视频app客户端(优酷,爱奇艺)播放视频的时候都有一些缓存进度(二级进度缓存),qq,微信有关的小视频,还有一些短视频app,都有边播边缓的处 ...

  9. Android程序一直吐司获取缓存记录失败 —— 极光推送

    问题: Android程序Toast提示 " 获取缓存记录失败 " ,看的很是别扭,而且想知道原因在哪里. 方案: 接入了极光推送所造成的原因. Android Studio双击S ...

  10. Android记录25-WebView实现离线缓存阅读

    Android记录25-WebView实现离线缓存阅读 前言 本篇博客要实现的是一个离线下载和离线阅读的功能,这是很多阅读类app都常见的一个功能,典型的应用就是网易新闻.什么是离线下载?其实这个概念 ...

最新文章

  1. Java学习-jsp内置对象Session
  2. nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集
  3. 数据库命名规则(转)
  4. memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?
  5. react部署之页面空白
  6. jQuery remove 内存 释放
  7. 在单元测试中访问私有字段
  8. Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
  9. 涡轮增压扫地机器人_帮着做家务,好坏在哪里,科沃斯T5扫地机器人
  10. JEECG开源社区, 成立了微信二次开发项目,欢迎有兴趣朋友参与
  11. 利用colab训练YOLOv5
  12. nginx+uwsgi 部署
  13. test1 exam3编程计算图形的面积
  14. 独立软件测试团队在敏捷开发中的几个特别实践
  15. 字符串的HashCode可能相同
  16. qca9533的TPlink wr841N换openwrt固件的一点体会
  17. 【算法】基于AOE网的关键路径算法
  18. Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
  19. 用js创建audio对象实现网页迷你音乐播放器
  20. 计算机端口怎么配置波特率,PLC波特率设置

热门文章

  1. Python二维数组赋值问题
  2. Python图像处理库(PIL)--Image,ImageDraw等基本模块介绍
  3. 2021-06-04 路由器频繁掉线 Maximum number of concurrent DNS queries reached (max: 150)
  4. 畅谈知识表示与知识图谱
  5. Thinkphp内核收卡网站源码/礼品卡回收兑换
  6. android 带刻度的滑动条_android 滚轮刻度尺的实现
  7. 我对移相器的理解(1):单bit的移相结构
  8. 谁在synopsys vdk里搭建过基于cortex-a55和cortex-a76的平台,并在上面成功跑过linux?
  9. Python 低功耗蓝牙搜索与连接
  10. EasyConnect - 提示获取服务端配置信息失败问题解决