我尝试使用RemoteMediator
从API中获取数据并缓存响应,通常效果很好。
我需要一些与正常行为稍有不同的东西。默认情况下,它似乎会自动首先(从房间)获取缓存的数据,只有当它到达列表的末尾时,它才会执行另一个请求。为了确保您获得最新的数据,我在文档中看到,每次用户进行新的搜索时,我都必须清除缓存的数据(以便使流程无效并更新RecyclerView的列表)。
我想做的是始终执行API请求(如果用户有互联网),并且只有在他没有互联网连接的情况下才使用缓存的数据(缓存的数据需要持久化,所以我不能删除它,因为我需要将它用作数据库中其他实体的外键)。
如有任何建议,欢迎光临。谢谢!
发布于 2021-11-19 18:42:00
分页所加载和呈现的所有项都完全由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)
}
}
}
https://stackoverflow.com/questions/69988241
复制相似问题