按房间和rxjava插入后获取自动生成的密钥

问题描述 投票:0回答:1

我是rxjava和房间的新手,我刚刚阅读了一些教程,他们说:Single<Long> or Maybe<Long> - onSuccess上发出的值是插入项目的行ID。

所以我试图用这样的房间做一些事情,我不知道如何在表格中插入新行后得到行ID(autoGenerate id)。

Dao.class

@Insert(onConflict = OnConflictStrategy.REPLACE)
    Single<Long> insert(User user);

Repository.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) {

        }
    });
rx-java2 android-room rx-android
1个回答
0
投票

所以如果我理解正确你想:

  1. 插入用户
  2. 然后使用新创建的用户的id调用另一个存储库以插入其他内容。

如果是这样的话,你可以这样做:

saleRepository.insertUser(user)
    .subscribeOn(Schedulers.io())
    .flatMap(newlyCreatedUserId -> otherRepository.insert(...))
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(newlyCreatedIdByOtherRepository -> /* show something on UI */)

对于最后一个语句(subscribe),您可以根据需要在非阻塞方法上使用许多可用的阻塞。

希望能帮助到你 :)

© www.soinside.com 2019 - 2024. All rights reserved.