У меня действительно сложная проблема.
У меня есть метод 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()
, но я должен использовать другого наблюдателя для извлечения пользователей, так что это приводит к вложенным наблюдателям.
Каков наилучший способ сделать это?