gpt4 book ai didi

java - 在事务中插入数据后 Flowable 未更新

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:43 25 4
gpt4 key购买 nike

当我们使用 Flowable 在插入新的数据库行后获取更新通知时,工作正常。
但是当插入是在另一个显式事务中完成时,Flowable 不会收到通知。

为了说明这个问题,我从 android-architecture-components fork 了 BasicRxJavaSample 并将 2 个测试方法添加到 UserDaoTest.java

@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-beginTransaction()文档中,嵌套事务应该没问题。

这可能是一个房间错误吗?

这个项目的房间版本是1.0.0-alpha3,但我也可以在版本1.0.0-alpha8(在另一个项目中)中看到这个问题

最佳答案

这是房间中的错误:#65471397

我确认该错误已在 1.0.0-rc1 版本中修复

关于java - 在事务中插入数据后 Flowable 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45817010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com