忽视缓存时,RoboSpice不会覆盖缓存对象

时间:2015-01-28 16:13:06

标签: android caching robospice

每当我开始活动时,我都会使用spicemanager.execute和params UserCacheKey以及一周的CacheTime从服务器获取用户对象。

当我执行pull to refresh时,我使用spicemanager.execute忽略当前缓存的用户对象缓存,而不提供UserCacheKey和CacheTime参数。

现在我从服务器获得了一个newUser对象,我想用这个新的覆盖仍然在缓存中的现有用户对象。所以我做的是使用spicemanager.putInCache并提供params User.class,UserCacheKey和newUserObject。我觉得奇怪的是我无法提供CacheTime。无论如何,我认为旧的User对象被我的新对象覆盖,因为我使用相同的UserCacheKey来存储对象。

但是,当我打电话从服务器(使用缓存)获取用户时,我得到了返回的旧用户对象,我认为它会被我的newUser对象覆盖。

很抱歉这是分配文字,但我不知道我是否正确实施。

1 个答案:

答案 0 :(得分:1)

当RoboSpice从网络加载数据时,它被放置在由缓存键和对象类型索引的缓存中,并加盖时间戳。在这一点上,到期是没有意义的。它仅用于在数据已经在缓存中时跟随请求。

对于正常负载,我建议使用execute(..., DurationInMillis.ONE_WEEK, ...)。这意味着如果在缓存中找到数据,它将检查它是否有效期不到一周。

然后在手动刷新时使用execute(..., DurationInMillis.ALWAYS_EXPIRED, ...),以便跳过缓存并从网络加载数据。加载的数据仍然存储在缓存中,因此下一个“正常”数据将被存储在缓存中。请求可以检索它。