rx-java2 - 通过房间和 rx java 插入后获取自动生成密钥
问题描述
我是新来的rxjava
房间,我刚刚阅读了一些教程,他们说:Single<Long> or Maybe<Long>
-发出的值onSuccess
是插入项目的行 ID。
所以我正在尝试用这样的房间做一些事情,我不知道在表中插入新行后如何获取行 ID(autoGenerate id)。
Dao.class
@Insert(onConflict = OnConflictStrategy.REPLACE)
Single<Long> insert(User user);
存储库.class
public Single<Long> insertUser(User user) {
return userDao.insert(user);
}
viewmodel.class
saleRepository.insertUser(user).observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribe(new SingleObserver<Long>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onSuccess(Long aLong) {
}
@Override
public void onError(Throwable e) {
}
});
解决方案
因此,如果我正确理解您想要:
- 插入用户
- 然后使用新创建的用户的 id 调用另一个存储库以插入其他内容。
如果是这种情况,您可以执行以下操作:
saleRepository.insertUser(user)
.subscribeOn(Schedulers.io())
.flatMap(newlyCreatedUserId -> otherRepository.insert(...))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(newlyCreatedIdByOtherRepository -> /* show something on UI */)
对于最后一个语句(subscribe
),您可以根据需要在非阻塞方法上使用许多可用的阻塞。
希望能帮助到你 :)