分页 3 - 仅在没有互联网时使用缓存数据,否则执行 API 请求
Posted
技术标签:
【中文标题】分页 3 - 仅在没有互联网时使用缓存数据,否则执行 API 请求【英文标题】:Paging 3 - Use cached data only if no internet, else do API requests 【发布时间】:2021-12-27 11:27:17 【问题描述】:我尝试使用RemoteMediator
从 API 获取数据并缓存响应,通常效果很好。
我需要一些不同于正常行为的东西。默认情况下,它似乎首先(从房间)自动获取缓存数据,并且只有当它到达列表末尾时,它才会执行另一个请求。为了确保您获得新数据,我在文档中看到,每次用户进行新搜索时,我都必须清除缓存数据(以使流程无效并更新 RecyclerView 的列表)。
我想要做的是始终执行 API 请求(如果用户有互联网),并且只有在他没有互联网连接时才使用缓存数据(缓存数据需要持久化,所以我可以'不要删除它,因为我需要将它用作数据库中其他实体的外键)。
感谢任何建议。谢谢!
【问题讨论】:
【参考方案1】:Paging 加载和呈现的所有项目完全由PagingSource
驱动。在这种情况下,您可以推迟删除缓存数据,直到您的网络请求成功,然后才删除 + 写入新数据。
例如,
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)
【讨论】:
以上是关于分页 3 - 仅在没有互联网时使用缓存数据,否则执行 API 请求的主要内容,如果未能解决你的问题,请参考以下文章
仅在滚动(分页)后显示的数据是不是是加载页面时 dom 的一部分?
Django基础---web框架 和 django 介绍3 --model --form---跨站请求---cookie--session--分页--缓存--信号