发布
社区首页 >问答首页 >分页3-只有在没有互联网的情况下才使用缓存的数据,否则使用API请求

分页3-只有在没有互联网的情况下才使用缓存的数据,否则使用API请求
EN

Stack Overflow用户
提问于 2021-11-16 11:24:14
回答 1查看 116关注 0票数 0

我尝试使用RemoteMediator从API中获取数据并缓存响应,通常效果很好。

我需要一些与正常行为稍有不同的东西。默认情况下,它似乎会自动首先(从房间)获取缓存的数据,只有当它到达列表的末尾时,它才会执行另一个请求。为了确保您获得最新的数据,我在文档中看到,每次用户进行新的搜索时,我都必须清除缓存的数据(以便使流程无效并更新RecyclerView的列表)。

我想做的是始终执行API请求(如果用户有互联网),并且只有在他没有互联网连接的情况下才使用缓存的数据(缓存的数据需要持久化,所以我不能删除它,因为我需要将它用作数据库中其他实体的外键)。

如有任何建议,欢迎光临。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-11-19 18:42:00

分页所加载和呈现的所有项都完全由PagingSource驱动。在这种情况下,您可以推迟删除缓存数据,直到您的网络请求成功,然后才能删除并写入新数据。

例如,

代码语言:javascript
代码运行次数:0
复制
class MyRemoteMediator(...) : RemoteMediator<Int, ...>() {
    override suspend fun load(
        loadType: LoadType,
        state: PagingState<Int, RedditPost>
    ): MediatorResult {
        try {
            val items = networkApi.fetchItems(..)

            db.withTransaction {
                if (loadType == REFRESH) {
                    // Clear cache
                }

                // Insert items into cache
                // Now call .invalidate()
            }

            return MediatorResult.Success(...)
        } catch (e: IOException) {
            return MediatorResult.Error(e)
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69988241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档