gpt4 book ai didi

android - 初始加载后更新 PagedListAdapter 以显示最新的网络数据

转载 作者:IT老高 更新时间:2023-10-28 13:39:00 25 4
gpt4 key购买 nike

我正在使用新的 Paging 库从休息 API 加载分页数据,但我无法理解如何在新数据缓存在 Room 后继续加载它。目前,我有一个 PagedListAdapter,它通过使用边界回调从 API 加载项目进行更新,然后将其存储在本地 DB(房间)中,通过 flowable 发送到 UI。

来自 BoundaryCallback 的 onZeroItemsLoaded 和 onItemAtEndLoaded 调用都按预期运行,但仅用于初始加载。一旦数据被检索一次并存储在缓存(Room)中,我将永远不会从网络服务中获取新数据——缓存中已经有数据并且不会触发边界回调。

如何使用分页库将项目标记为过时的,以便每次应用打开时我的数据都是最新的?

ItemCallback.kt:

class ItemBoundaryCallback : PagedList.BoundaryCallback<Item>() {
override fun onZeroItemsLoaded() {
itemsFromNetwork(0)
}

override fun onItemAtEndLoaded(itemAtEnd: Item) {
itemsFromNetwork(itemAtEnd.rank)
}
}

ItemRepository.kt:

fun items(): Flowable<PagedList<Item>> {
return RxPagedListBuilder(database.itemDao().items(), pageSize)
.setBoundaryCallback(boundaryCallback)
.buildFlowable(BackpressureStrategy.LATEST)
}

ItemDao.kt

@Query("SELECT * FROM item ORDER BY rank ASC")
fun items(): DataSource.Factory<Int, Item>

ItemAdapter.kt

class ItemAdapter() : PagedListAdapter<Item, ItemViewHolder>(diffCallback) {
companion object {
private val diffCallback = object : DiffUtil.ItemCallback<Item>() {
override fun areItemsTheSame(old: Item, new: Item): Boolean = old.id == new.id
override fun areContentsTheSame(old: Item, new: Item): Boolean = old == new
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemViewHolder {
return ItemViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.r_item, parent, false))
}

override fun onBindViewHolder(viewHolder: ItemViewHolder, position: Int) {
viewHolder.bind(getItem(position), clickListener)
}
}

ItemFragment.kt

override fun onStart() {
super.onStart()

itemRepository.items()
.subscribe(itemAdapter::submitList)
.addTo(disposables)

最佳答案

使用这种技术(数据库和休息)的重点是缓存数据并防止再次加载它们。但是,如果您的数据不是静态的,它可能会被更改或失效。你可以有两种方法:

1 - 关闭应用后(或启动应用时删除数据库中的每条记录。销毁回调不可行),在这种情况下,您将在下次启动后获得新数据。

2 - 在您的数据库中创建一个字段作为“到期”日期或类似的东西。继续检查 boundaryCallbackonItemAtFrontLoaded 上的字段,如果它们已过期,您可以使其失效并再次从 Web 服务获取。

关于android - 初始加载后更新 PagedListAdapter 以显示最新的网络数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51034596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com