微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BoundaryCallback 类仅使用分页库 2 调用一次

如何解决BoundaryCallback 类仅使用分页库 2 调用一次

我正在使用分页库 2 使用房间数据库执行本地数据存储,加载数据后,我将 param.key 保存在共享首选项中,然后在边界回调中将其取回以触发新页面,但问题是边界回调只调用一次,不再调用,我不明白为什么,任何帮助将不胜感激,谢谢

Libary
  • BoundaryCallback 类
    override fun loadAfter(params: LoadParams<Int>,callback: LoadCallback<Int,MovieResultItem>) {
       compositedisposable.add(apiInterface
               .getPopularMovies(BuildConfig.MoviesApiKey,languageCode,params.key)
               .toObservable()
               .subscribeOn(Schedulers.io())
               .subscribe ({
                   callback.onResult(it?.results!!,params.key + 1)
                    //saving params.key here
                   saveCurrentKey(context,params.key)
               },{
                   t: Throwable? ->
                   Timber.d("Error ${t?.message}")
               })!!)
    }
}

private fun saveCurrentKey(context: Context,key : Int){
    val popularPrefs = context.getSharedPreferences(Extras.POPULAR_PREFS,Context.MODE_PRIVATE)
    popularPrefs.edit().apply {
        putInt("value",key)
        apply()
    }
}
  • 将 Boundarycallback 设置为我的 LiveDataPagedlist
   override fun onZeroItemsLoaded() {
        super.onZeroItemsLoaded()
        getMovieGenre()
    }

    override fun onItemAtFrontLoaded(itemAtFront: MovieResultItem) {
        super.onItemAtFrontLoaded(itemAtFront)
        getMovieGenre()
    }

    override fun onItemAtEndLoaded(itemAtEnd: MovieResultItem) {
        super.onItemAtEndLoaded(itemAtEnd)
        getMovieGenre()
    }


    @SuppressLint("CheckResult")
    private fun getMovieGenre() {

        apiInterface.getPopularMovies(BuildConfig.MoviesApiKey,Extras.getLanguageCode(context),key!!)
                .toObservable()
                ?.doOnSubscribe {
                    compositedisposable.add(it)
                }
                ?.subscribeOn(Schedulers.io())
                ?.map {
                    it.results
                }
                ?.subscribe({
                    it!!.map {
                        it.uniqueIdentifier = Extras.POPULAR_VALUE
                        popularMoviesDao.insertPopularMovies(it)
                    }
                },{
                    Timber.d("Boundary Popular Movies Exception ${it.message}")
                })
    }
}

 // Getting params.key and pass it to my api call request to fetch data
private fun getCurrentKey(context: Context): Int {
    val popularPrefs = context.getSharedPreferences(Extras.POPULAR_PREFS,Context.MODE_PRIVATE)
    return popularPrefs.getInt("value",1)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。