Android分页3:LoadType.APPEND返回空远程键
我一直在尝试解决如何使用Android分页3:LoadType.APPEND返回空远程键,android,android-paging,android-paging-library,android-paging-3,Android,Android Paging,Android Paging Library,Android Paging 3,我一直在尝试解决如何使用RemoteMediator的APPENDLoadType解决我的问题 在一个空房间DB上,以下是LoadType的流程: 刷新->前置->追加(remoteKeys=null,EndofPaginationReach=true) 实体和远程键表至少有10行,下面是LoadType的流程: 刷新->前置->追加(remoteKeys=prev=null,next=2,endofPaginationReach=false) 显然,我的问题是在新安装的设备上(有空房间DB),
RemoteMediator
的APPEND
LoadType
解决我的问题
在一个空房间DB上,以下是LoadType
的流程:
刷新->前置->追加(remoteKeys=null,EndofPaginationReach=true)
实体和远程键表至少有10行,下面是LoadType
的流程:
刷新->前置->追加(remoteKeys=prev=null,next=2,endofPaginationReach=false)
显然,我的问题是在新安装的设备上(有空房间DB),用户不会看到超过10项,因为APPEND
的状态。lastItemOrNull()
返回null
以下是我目前的代码:
private suspend fun getRemoteKeysForLastItem(state: PagingState<Int, MovieCache>): MovieRemoteKeys? {
return state.lastItemOrNull()?.let { movie ->
appDatabase.withTransaction {
appDatabase.remoteKeysDao().remoteKeysByImdbId(movie.imdbId)
}
}
}
下面是一个示例日志,显示APPEND
为null
使我的应用程序无法向下滚动至少一次
编辑:以下是我保存遥控钥匙的方式:
最后,我通过依赖DB上的RemoteKey而不是
PagingState
解决了这个问题:
LoadType.APPEND -> {
// val key = getRemoteKeysForLastItem(state) // Doesn't work. state returns NULL even Room has data for both remote keys and entity.
val key = appDatabase.withTransaction {
remoteKeysDao.allKeys().lastOrNull() // Workaround
}
key?.nextKey ?: return MediatorResult.Success(true)
}
你能调查一下这个问题吗?
LoadType.APPEND -> {
// val key = getRemoteKeysForLastItem(state) // Doesn't work. state returns NULL even Room has data for both remote keys and entity.
val key = appDatabase.withTransaction {
remoteKeysDao.allKeys().lastOrNull() // Workaround
}
key?.nextKey ?: return MediatorResult.Success(true)
}