我正在使用新的Android persistance lib,Room,带有RxJava2。以下代码导致无限循环。如果我注释掉在第二个observable中更新用户的行,它可以正常工作。如果我把它留在那里,第一个observable的onNext方法将被再次调用。
当实体更新时,Room是否重新查询表格?如果是这样,为什么它会在同一个流上再次发布消息?这是预期的行为吗?它是库中的错误吗?
val userDao = HeyHeyApp.database.userDao();
userDao.getAll()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ listOfUsers ->
if (!listOfUsers.isEmpty()) {
HeyHeyApp.currentUser = listOfUsers.first()
HeyHeyApp.currentUser.fcmDeviceId = getDeviceId()
Single.fromCallable({
HeyHeyApp.database.userDao()
.updateUser(HeyHeyApp.currentUser)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ _ ->
})
}
})
答案 0 :(得分:3)
当您订阅userDao.getAll()事件时 - 每次更改数据库数据时,Room都会触发您的观察者onNext()方法。然后在onNext()方法中更改数据库中的数据:
Single.fromCallable({
HeyHeyApp.database.userDao()
.updateUser(HeyHeyApp.currentUser)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ _ ->
})
然后再调用你的onNext()方法......等等。