Android Paging 3 与房间

标签 android android-room android-paging-3

我正在从 Paging 2 迁移到 Paging 3。该应用程序使用 Room 将大型数据集存储在数据库中,我可以从 Room 加载数据并正常显示。我遇到的问题是,一旦应用程序对数据库进行了更改,它就会崩溃。
代码 fragment 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

关于Android Paging 3 与房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67998276/

相关文章:

android - 警告 : linker: libvc1dec_sa. ca7.so 有文本重定位。这是在浪费内存并且存在安全风险。请修复

android - 在启动画面中隐藏 Android PWA 标题

android - 房间livedata : crash on launch

android - sqlite 中的 strftime() 给出了错误的结果

Android,类型参数列表适配器

Android Paging 3 不显示 Loadstate Adapter

android - 为什么 AsyncPagingDataDiffer submitData() 应该卡住和超时测试?

java - toast 继承主题背景

android - android中如何处理数据