在事务中插入数据后,Flowable不会更新

时间:2017-08-22 11:57:31

标签: java rx-java2 android-room

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

为了说明这个问题,我从BasicRxJavaSample分叉android-architecture-components并将{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();
    }
  }

我们可以看到此代码使用了一个事务,我的测试代码也使用了另一个事务 根据{{​​3}}文档,嵌套事务应该没问题。

这可能是房间错误吗?

此项目的会议室版本为1.0.0-alpha3,但我也可以在版本1.0.0-alpha8(另一个项目)中看到此问题

1 个答案:

答案 0 :(得分:0)

这是房间里的错误:#65471397

我确认该错误已通过版本1.0.0-rc1

修复