我正在开发一个Android应用程序。 使用RxJava。
它将到期时间将用户数据存储在本地数据库中。
首先,它从本地数据库获取用户数据。 并检查到期时间,如果数据是旧数据,那么它将从远程服务器获取用户数据并将其更新到本地数据库。
fun getPlayer(playerId: String): Single<Player> {
return playerDao.getPlayer(playerId)
.doOnSuccess { // "doOnSuccess" is right? what method should I use?
if (PlayerUtil.isNeededUpdate(it)) {
Log.d(TAG, "getPlayer(local) - old!")
getPlayerFromRemote(playerId)
// How can I return Observable/Flowable/Single in here?
// (case of need to update data)
}
}
.onErrorResumeNext {
// If local database has no player, then it try to get it from remote server
Log.d(TAG, "getPlayer(local) - onError: ${it.message}")
getPlayerFromRemote(playerId)
}
}
答案 0 :(得分:2)
doOnSuccess
仅用于副作用,而不是影响流本身的动作。
您要查找的是flatMap
,如果不需要执行任何操作,则只返回标量值:
.flatMap {
if (PlayerUtil.isNeededUpdate(it)) {
getPlayerFromRemote(playerId)
} else {
Single.just(it)
}
}