首页 > 解决方案 > 将android分页库与内存中的项目一起使用

问题描述

我尝试使用 rxJava 实现分页库,首先,我调用 NetworkApi 来加载完整数据,然后我想对完整加载的数据使用分页,我该如何使用库,我正在尝试使用 ItemKeyedDataSource 类,但是请,我是否需要始终将元素大小传递给我的 api 调用,或者我只能使用内存中加载的数据?

这是我的 api 调用:

  public fun getMembersPagination(): MutableLiveData<ResultContainer<PagedList<MembersModel.Data.Member?>>> {
    disposable = client.getMembersPaged()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .retry(0)
            .subscribe(
                    { result ->
                        onRetrieveUserData(result)
                    },
                    { error -> onRetrieveUserDataError(error) }
            )

    return pagedList
}

我不从我的 Api 中处理 pagiantion

这是api:

  @GET("members")
fun getMembersPaged(): Observable<PagedList<MembersModel.Data.Member?>>

ItemKeyedData源代码:

    class MembersPaginationDataSource(private val memberId: Int)
: ItemKeyedDataSource<Int, MembersModel.Data.Member?>() {

val client by lazy {
    RetrofitClient.RetrofitClient()
}

var disposable: Disposable? = null

private var allMembers = MutableLiveData<PagedList<MembersModel.Data.Member?>>()


override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<MembersModel.Data.Member?>) {

    getMembersPagination().observe()


}

override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<MembersModel.Data.Member?>) {
}

override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<MembersModel.Data.Member?>) {


}

override fun getKey(item: MembersModel.Data.Member): Int = item.id!!


public fun getMembersPagination(): MutableLiveData<PagedList<MembersModel.Data.Member?>> {
    disposable = client.getMembersPaged()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .retry(0)
            .subscribe(
                    { result ->
                        onRetrieveUserData(result)
                    },
                    { error -> onRetrieveUserDataError(error) }
            )

    return allMembers
}


private fun onRetrieveUserData(membersModel: PagedList<MembersModel.Data.Member?>?) {
    allMembers.postValue(membersModel)
}

private fun onRetrieveUserDataError(error: Throwable) {
    allMembers.postValue(null)
}

}

我停在那一点

标签: androidkotlinrx-javarx-java2rx-android

解决方案


推荐阅读