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)
}