Flowable не излучает при изменении базы данных

В базе данных комнат у меня есть объект (Пользователь) с идентификатором «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");
  }
});

Может ли кто-нибудь объяснить мне, что мне здесь не хватает?

Вы должны запросить у Subscription.

akarnokd 15.08.2018 22:10

Вы вместо этого пробовали Flowable<List<User>>? Вы также можете попробовать что-то вроде Flowable<Optional<User>>, хотя я думаю, что для этого требуется гуава.

EpicPandaForce 15.08.2018 22:14

@akarnokd: Если я использую Subscription.OnNext (), разве это не значит, что я вручную запрашиваю обновления?

Android14 15.08.2018 22:29
Subscriber.onNext является приемником событий, он не объявляет, когда и сколько предметов вы хотите получить.
akarnokd 15.08.2018 22:38

@akarnokd: при подписке есть один переопределенный onNext (). Не могли бы вы рассказать мне, как / где именно мне использовать Subscriber.onNext.

Android14 15.08.2018 22:48
0
5
635
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Запрос от 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");
  }
});

Другие вопросы по теме