首页 > 解决方案 > 未使用 DataSource 调用 BoundaryCallback

问题描述

我创建了一个边界回调和一个数据源,数据源从数据库中读取,边界回调应该进行 API 调用并持久化到数据库。

但是,边界回调中被覆盖的方法永远不会被调用,我不知道是否有一条规则说你不能同时使用两者。但这让我发疯,我不明白。

    private val postsDataFactory  = object: DataSource.Factory<String, Post>() {
        override fun create(): DataSource<String, Post> {
            return ItemDataSource(application)
        }
    }

    private val postsBoundaryCallback = object: PagedList.BoundaryCallback<Post>(){
        override fun onZeroItemsLoaded() {
            super.onZeroItemsLoaded()
            viewModelScope.launch {
                try {
                    val posts = postsRepo.findPosts(mutableMapOf("limit" to "1"))

                    database.postDao().create(posts)
                } catch (e: IOException) {
                    Log.d("NETWORK_ERROR", e.message)
                } catch (e: Exception) {
                    Log.d("UNCAUGHT_ERROR", e.message)
                }
            }
        }

        override fun onItemAtEndLoaded(itemAtEnd: Post) {
            viewModelScope.launch {
                try {
                    val posts = postsRepo.findPosts(mutableMapOf(
                        "before" to itemAtEnd.id,
                        "limit" to "1"
                    ))

                    database.postDao().create(posts)
                } catch (e: IOException) {
                    Log.d("NETWORK_ERROR", e.message)
                } catch (e: Exception) {
                    Log.d("UNCAUGHT_ERROR", e.message)
                }
            }
        }
    }

    private val postPageConfig = PagedList
        .Config
        .Builder()
        .setPageSize(10)
        .setInitialLoadSizeHint(10)
        .build()

    val postsLiveData = LivePagedListBuilder(
            postsDataFactory,
            postPageConfig
        )
        .setBoundaryCallback(postsBoundaryCallback)
        .build()

标签: androidandroid-jetpack

解决方案


推荐阅读