使用RxJava获取插入ID(Room)

时间:2019-05-08 14:48:06

标签: java rx-java android-room

我可以使用RxJava在下面添加一行,

Completable.fromAction(() -> db.userDao().insert(user)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new CompletableObserver() {
            @Override
            public void onSubscribe(Disposable d) {

            }

            @Override
            public void onComplete() {

            }

            @Override
            public void onError(Throwable e) {

            }
        });

道:

@Insert(onConflict = OnConflictStrategy.REPLACE)
    long insert(User user);

在数据库操作后如何获取行ID?

1 个答案:

答案 0 :(得分:0)

如果要将RxJava与Room一起使用,可以更改insert函数以返回包装Long的RxJava Single,例如:

@Insert
Single<Long> insert(User user);

通过这种方式,您可以只订阅此Single,并且会得到如下所示的ID作为Long:

db.userDao().insert(user)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new SingleObserver<Long>() {
            @Override
            public void onSubscribe(Disposable d) {
            }
            @Override
            public void onSuccess(Long aLong) {
                // aLong is the id
            }
            @Override
            public void onError(Throwable e) {
            }
        });