android - Android Paging 3 与房间
问题描述
我正在从 Paging 2 迁移到 Paging 3。该应用程序使用 Room 将大型数据集存储在数据库中,我可以从 Room 加载数据并正常显示。我遇到的问题是,一旦应用程序对数据库进行了更改,它就会崩溃。
代码片段
IssueRepository
@Query("SELECT * FROM isssue WHERE project_id = ?")
fun findAllInProject(projectId:Int): PagingSource<Int, IssueListBean>
在函数中onCreateView
val dataSource = DB.store.issueRepository().findAllInProject(project.id)
val pageConfig = PagingConfig(50)
val pager = Pager(pageConfig, null) { dataSource }.flow
viewLifecycleOwner.lifecycleScope.launchWhenCreated {
pager.collectLatest { data ->
adapter.submitData(data)
}
}
class PagingAdapter : PagingDataAdapter<IssueListBean, PagingAdapter.ViewHolder>(EntityComparator()) {
inner class ViewHolder(private val adapterBinding: ItemIssueListBinding) : RecyclerView.ViewHolder(adapterBinding.root) {
fun bind(position: Int) {
val issueListBean = getItem(position)
adapterBinding.label.text = issueListBean.label
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemIssueListBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bind(position)
}
}
因此,当用户点击某个项目时,他们可以对其进行编辑。一旦通过 Room 保存该项目,应用程序就会崩溃,但出现以下异常:
java.lang.IllegalStateException: An instance of PagingSource was re-used when Pager expected to create a new
instance. Ensure that the pagingSourceFactory passed to Pager always returns a
new instance of PagingSource.
我用错了第 3 页吗?我在网上找不到很多关于使用 Room 作为您进行更改的数据源的文章。
解决方案
您传递给 Pager() 的 lambda 应该每次都返回数据源的一个新实例,因此将对 findAllInProject() 的调用移动到该 lambda 中,例如
val pager = Pager(pageConfig, null) {
DB.store.issueRepository().findAllInProject(project.id)
}.flow
推荐阅读
- airflow - s3存储桶中的气流日志
- django-rest-framework - Django REST 模型 Model.objects.create 函数的参数
- c# - 无法使用通配符搜索模式搜索 Microsoft Graph Api V1.0 用户
- git - 在推送时重用 git 树
- android - Android - 删除了环绕居中文本的人工填充
- c# - 每秒 C# 异步服务器操作
- sql-server - 为 Sql 2008 存储未使用的数据库和表
- unity3d - Gradient.Evaluate 如何在内部工作?
- c - 在 C 中转换无符号 64 位数字的字节顺序问题
- regex - 正则表达式匹配同一行中的多个值