对内存中的项目使用android分页库
我尝试使用rxJava实现分页库,首先,我调用NetworkApi来加载完整数据,然后我想使用分页来加载完整数据,我如何使用库,我尝试使用ItemKeyedDataSource类,但是请,我是否总是需要将元素大小传递给api调用,还是只能处理内存中加载的数据 这是我的api调用:对内存中的项目使用android分页库,android,kotlin,rx-java,rx-java2,rx-android,Android,Kotlin,Rx Java,Rx Java2,Rx Android,我尝试使用rxJava实现分页库,首先,我调用NetworkApi来加载完整数据,然后我想使用分页来加载完整数据,我如何使用库,我尝试使用ItemKeyedDataSource类,但是请,我是否总是需要将元素大小传递给api调用,还是只能处理内存中加载的数据 这是我的api调用: public fun getMembersPagination(): MutableLiveData<ResultContainer<PagedList<MembersModel.Data.Mem
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
}
public fun getMembersPagination():MutableLiveData{
一次性=client.getMembersPaged()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
。重试(0)
.订阅(
{结果->
onRetrieveUserData(结果)
},
{错误->onRetrieveUserDataError(错误)}
)
返回页面列表
}
我不处理Api中的分页
这是api:
@GET("members")
fun getMembersPaged(): Observable<PagedList<MembersModel.Data.Member?>>
@GET(“成员”)
fun getMembersPaged():可观察
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)
}
class MembersPaginationDataSource(私有val memberId:Int)
:ItemKeyedDataSource(){
懒惰的val客户端{
reformationclient.reformationclient()
}
var一次性:一次性?=null
私有变量allMembers=MutableLiveData()
重写fun loadInitial(参数:LoadInitialParams,回调:LoadInitialCallback){
getMembersPagination().observe()
}
重写fun loadAfter(参数:LoadParams,回调:LoadCallback){
}
覆盖有趣的loadBefore(参数:LoadParams,回调:LoadCallback){
}
重写fun getKey(item:MembersModel.Data.Member):Int=item.id!!
public fun getMembersPagination():MutableLiveData{
一次性=client.getMembersPaged()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
。重试(0)
.订阅(
{结果->
onRetrieveUserData(结果)
},
{错误->onRetrieveUserDataError(错误)}
)
返回所有成员
}
private fun onRetrieveUserData(membersModel:PagedList?){
allMembers.postValue(membersModel)
}
private fun onRetrieveUserDataError(错误:可丢弃){
allMembers.postValue(null)
}
}
我就到此为止您的自定义
ItemKeyedDataSource
实现是什么?为什么要将它与rx混合使用?我用RxJava进行api调用,我想在内存中一次加载所有项并使用分页为什么要用rx进行api调用?您的自定义ItemKeyedDataSource
实现是什么?例如,你看到了吗?我在100KB的顶端添加了代码?200x200像素的小图像占用更多内存。。。因此,您不必担心适配器中的任何分页