RxJava: вложенные наблюдатели - PullRequest
0 голосов
/ 30 апреля 2019

У меня действительно сложная проблема.

У меня есть метод void insert(User user) в моем DAO.Я обернул его:

public Completable insertUser(User user) {
    return Completable.fromAction(() -> userDao.insert(user))
            .subscribeOn(Schedulers.io())

, который возвращает Completable.В моей ViewModel я просто возвращаю то же самое:

public Completable insertUser(User user) {
    return userDao.insertUser(user);

И в моем пользовательском интерфейсе я наблюдаю на завершаемом:

    vm.insertUser(vm.getSomeUsers())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new CompletableObserver() {
                @Override
                public void onSubscribe(Disposable d) {
                    // Do nothing
                }

                @Override
                public void onComplete() {
                    userAdapter.populate( ? ) // here I need the refreshed user
                }

                @Override
                public void onError(Throwable e) {
                }
            });

Проблема в том, что моя вставка не возвращаетобновленный пользователь, я не могу изменить его на Observable<User> insertUser(), потому что я использую более низкую версию Room.

Итак, мой вопрос, как я могу заполнить адаптер обновленным пользователем?У меня есть другой метод в моем дао Flowable<User> getUsers(), но я должен использовать другого наблюдателя для извлечения пользователей, так что это приводит к вложенным наблюдателям.

Каков наилучший способ сделать это?

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете сделать это так же просто, как

public Single<User> insertUser(User user) {
    return Completable.fromAction(() -> userDao.insert(user))
            .subscribeOn(Schedulers.io())
            .andThen(Single.just(user));

Он вернет пользователя, которого вы только что вставили.

...