我有一个非常棘手的问题。
我的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()
中有另一种方法,但是我必须使用其他观察者来检索用户,从而导致嵌套的观察者。
最好的方法是什么?
答案 0 :(得分:0)
您可以像
一样简单public Single<User> insertUser(User user) {
return Completable.fromAction(() -> userDao.insert(user))
.subscribeOn(Schedulers.io())
.andThen(Single.just(user));
它将返回您刚刚插入的用户。