当我们在插入新的数据基行后使用可流获取更新通知时,工作正常。
但是,当插入在另一个显式事务中完成时,可流性不会得到通知。
为了说明这个问题,我从android-architecture-components中分出了android-architecture-components,并向UserDaoTest.java添加了2种测试方法。
@Test
public void testFlowable() {
// When subscribing to the emissions of the user
final TestSubscriber<User> userTestSubscriber = mDatabase.userDao().getUser().test();
userTestSubscriber.assertValueCount(0);
// When inserting a new user in the data source
mDatabase.userDao().insertUser(USER);
userTestSubscriber.assertValueCount(1);
}这个很好用。但是,当我在显式事务的内部执行相同的操作时,它不起作用:
@Test
public void testFlowableInTransaction() {
// When subscribing to the emissions of the user
final TestSubscriber<User> userTestSubscriber = mDatabase.userDao().getUser().test();
userTestSubscriber.assertValueCount(0);
// When inserting a new user in the data source
mDatabase.beginTransaction();
try {
mDatabase.userDao().insertUser(USER);
mDatabase.setTransactionSuccessful();
} finally {
mDatabase.endTransaction();
}
userTestSubscriber.assertValueCount(1);
// this fails - the userTestSubscriber is still empty!
}注意:这个例子当然是简化的,只是为了说明这个问题。
下面是生成的DaoImpl.insertUser()
public void insertUser(User user) {
__db.beginTransaction();
try {
__insertionAdapterOfUser.insert(user);
__db.setTransactionSuccessful();
} finally {
__db.endTransaction();
}
}我们可以看到这个代码使用一个事务,我的测试代码也使用另一个事务。
根据SupportSQLiteDatabase-初级事务()文档,嵌套事务应该是可以的。
这可能是房间窃听器吗?
这个项目的房间版本是1.0.0-alpha3,但是我也可以看到1.0.0-alpha8版本的这个问题(在另一个项目中)。
发布于 2017-10-20 11:44:36
这是房间里的一个窃听器:#65471397
我验证了这个错误已经用1.0.0-rc1版本修复了。
https://stackoverflow.com/questions/45817010
复制相似问题