Получение идентификатора вставки с помощью RxJava (Room) - PullRequest
0 голосов
/ 08 мая 2019

Я могу добавить строку с помощью 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) {

            }
        });

Dao:

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

Как получить идентификатор строки после операции с БД?

1 Ответ

0 голосов
/ 08 мая 2019

Если вы хотите использовать RxJava с Room, вы можете изменить функцию insert, чтобы она возвращала RxJava Single wrapping a Long, например:

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

Таким образом, вы можете просто подписаться на этот Single, и вы получите идентификатор как 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) {
            }
        });
...