Paging 3 - 如何处理自 beta01 以来出现的旧 APPEND RemoteMediator 请求?

问题描述

从Paging 3的beta01版本开始,当从RemoteMediator刷新PagingData时,有时会发生刷新完成后仍然执行上一代的旧APPEND请求.这似乎是从 this commit 读取的预期行为。 发生这种情况时,旧的 APPEND 请求会调用 RemoteMediatorload 方法,但使用过时的 PagingState。如果我们在加载函数中使用其中的信息,这个过时的 PagingState 可能会导致错误和崩溃(例如,下面的代码片段使用 lastItemOrNull数据库)。发行说明中根本没有提到这一重大更改(也打破了 corresponding codelab)。我们应该如何处理这个问题?

这是一个RemoteKeys 中断的 RemoteMediator 示例。 beta01 方法可以返回 getRemoteKeyForLastItem(因为旧的 null 正在寻找在前一个 PagingState删除数据库条目)导致 REFRESH抛出。

InvalidobjectException

解决方法

我与 Dustin Lam 和 Yigit Boyar 进行了交谈,显然,处理此问题的最佳方法是使 append 不依赖于 PagingState。这意味着我们应该将远程键存储在与查询相关的表中,而不是在项目级别。

示例:

@Entity(tableName = "search_query_remote_keys")
data class SearchQueryRemoteKey(
    @PrimaryKey val searchQuery: String,val nextPageKey: Int
)