получить автогенерацию ключа после вставки по комнате и RX Java - PullRequest
0 голосов
/ 13 марта 2019

Я новичок в rxjava и комнате, я только что прочитал некоторый учебник, и они сказали: Single<Long> or Maybe<Long> - где значение, указанное в onSuccess, является идентификатором строки вставленного элемента.

Поэтому я пытаюсь что-то сделать с комнатой, подобной этой, и я не знаю, как можно получить идентификатор строки (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) {

        }
    });

1 Ответ

0 голосов
/ 15 марта 2019

Итак, если я правильно понимаю, вы хотите:

  1. вставить пользователя
  2. , а затем вызвать другой репозиторий с идентификатором только что созданного пользователя, чтобы вставить что-то еще.

Если это так, вы можете сделать что-то подобное:

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

Для последнего оператора (subscribe) вы можете использовать многие из доступных блокировок для неблокирующих методов в зависимости от ваших потребностей.

Надеюсь, это поможет:)

...