В базе данных комнат у меня есть объект (Пользователь) с идентификатором «1», и мой DAO возвращает Flowable этого объекта. После подписки я вызываю функцию editUser ().
@Query ("SELECT * FROM User Where id=:id ")
Flowable<User> getUser(String id);
@Update
void update(User user);
Я не получаю никакого обратного звонка (onNext или onComplete) всякий раз, когда я вношу изменения в этот объект User и обновляю его в БД.
public void editUser() {
User u = new User();
u.id = "1";
u.age=45;
appDB.userModel().update(u);
}
appDB.userModel().getUser("1").subscribe(new Subscriber<User>() {
@Override
public void onSubscribe(Subscription s) {
Log.d(TAG,"onSubscribed");
}
@Override
public void onNext(User user) {
Log.d(TAG,"onNext");
}
@Override
public void onError(Throwable t) {
Log.d(TAG,"Error");
}
@Override
public void onComplete() {
Log.d(TAG,"onComplete");
}
});
Может ли кто-нибудь объяснить мне, что мне здесь не хватает?
Вы вместо этого пробовали Flowable<List<User>>? Вы также можете попробовать что-то вроде Flowable<Optional<User>>, хотя я думаю, что для этого требуется гуава.
@akarnokd: Если я использую Subscription.OnNext (), разве это не значит, что я вручную запрашиваю обновления?
Subscriber.onNext является приемником событий, он не объявляет, когда и сколько предметов вы хотите получить.
@akarnokd: при подписке есть один переопределенный onNext (). Не могли бы вы рассказать мне, как / где именно мне использовать Subscriber.onNext.
Запрос от Subscription!
appDB.userModel().getUser("1").subscribe(new Subscriber<User>() {
@Override
public void onSubscribe(Subscription s) {
Log.d(TAG,"onSubscribed");
// ------------------------------------------------------------------------
s.request(Long.MAX_VALUE);
// ------------------------------------------------------------------------
}
@Override
public void onNext(User user) {
Log.d(TAG,"onNext");
}
@Override
public void onError(Throwable t) {
Log.d(TAG,"Error");
}
@Override
public void onComplete() {
Log.d(TAG,"onComplete");
}
});
Вы должны запросить у
Subscription.