Room + RxJava2 无限循环案例
Room + RxJava2 case with infinite loop
我正在使用新的 Android 持久性库 Room 和 RxJava2。以下代码导致无限循环。如果我在第二个可观察对象中注释掉更新用户的行,它就可以正常工作。如果我把它留在那里,第一个 observable 的 onNext 方法将被一次又一次地调用。
Room 是否在更新实体时重新查询 table?如果是这样,为什么要在同一流上再次发布消息?这是有意的行为吗?是库中的错误吗?
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({ _ ->
})
}
})
当您订阅 userDao.getAll() 事件时 - 每次数据库数据更改时,Room 都会触发您的观察者 onNext() 方法。接下来在 onNext() 方法中更改数据库中的数据:
Single.fromCallable({
HeyHeyApp.database.userDao()
.updateUser(HeyHeyApp.currentUser)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ _ ->
})
然后在 Room 之后再次调用您的 onNext() 方法...等等。
我正在使用新的 Android 持久性库 Room 和 RxJava2。以下代码导致无限循环。如果我在第二个可观察对象中注释掉更新用户的行,它就可以正常工作。如果我把它留在那里,第一个 observable 的 onNext 方法将被一次又一次地调用。
Room 是否在更新实体时重新查询 table?如果是这样,为什么要在同一流上再次发布消息?这是有意的行为吗?是库中的错误吗?
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({ _ ->
})
}
})
当您订阅 userDao.getAll() 事件时 - 每次数据库数据更改时,Room 都会触发您的观察者 onNext() 方法。接下来在 onNext() 方法中更改数据库中的数据:
Single.fromCallable({
HeyHeyApp.database.userDao()
.updateUser(HeyHeyApp.currentUser)
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ _ ->
})
然后在 Room 之后再次调用您的 onNext() 方法...等等。