RxJava:嵌套观察者

时间:2019-04-30 10:05:09

标签: android rx-java2

我有一个非常棘手的问题。

我的DAO中有一种void insert(User user)方法。我用:

包装
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的较低版本。

所以我的问题是,如何用更新的用户填充适配器?我在dao Flowable<User> getUsers()中有另一种方法,但是我必须使用其他观察者来检索用户,从而导致嵌套的观察者。

最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以像

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

它将返回您刚刚插入的用户。