【问题标题】:Android Paging 3 with RoomAndroid Paging 3 与房间
【发布时间】:2021-06-16 07:33:10
【问题描述】:

我正在从 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 作为您进行更改的数据源的文章。

【问题讨论】:

    标签: android android-room android-paging-3


    【解决方案1】:

    您传递给 Pager() 的 lambda 应该每次都返回一个新的数据源实例,因此将对 findAllInProject() 的调用移到该 lambda 中,例如

    val pager = Pager(pageConfig, null) {
        DB.store.issueRepository().findAllInProject(project.id)
    }.flow
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 2020-12-15
      • 2021-10-05
      • 2019-08-29
      相关资源
      最近更新 更多