PublishSubject
получаю посредством метода в DbRepository
. Сам DbRepository
Singleton
public PublishSubject<User> getUser() {
return userSubject;
}
Создаю слушатель на PublishSubject
в Presenter
public void listenUser(){
disposableBag.add(this.dbRepository.getUser().subscribe(user -> {
// Действия
}));
}
Вызываю его в Fragment
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
presenter.listenUser();
super.onCreate(savedInstanceState);
}
Уничтожаю его методом
public void unListen(){
disposableBag.clear();
}
В фрагменте
@Override
public void onDestroy() {
presenter.unListen();
super.onDestroy();
}
Проблема в том что когда первый раз захожу во фрагмент то инициализируется Presenter
и я начинаю слушать PublishSubject
, приходит последний user
, все окей. Потом когда я нажимаю кнопку назад происходит onDestroy
, подписка удаляется. При повторном входе в фрагмент опять же инициализируется Presenter
, но listenUser()
как будто игнорируется, последний user
не приходит. В чем проблема?
Скорее всего вам нужно использовать BehaviorSubject вместо PublishSubject
. Когда вы вызываете onNext()
у PublishSubject
он отправит объект User
только активным подписчикам. Если второй экземпляр презентера подпишется после того как уже был отправлен User
, он получит User
только когда вы снова вызовете onNext()
в репозитории. BehaviorSubject
же всегда отправляет последний элемент подписчикам в момент подписки, т.е. при повторном создании фрагмента, новый презентер получит ранее переданный в BehaviorSubject
объект User
.
Статья с описанием видов Rx Subject
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть класс Book, который содержит поля типа String такие как Название книги, автор, издательство, тип переплета, год издательства, кол-во страниц...
Streaming api vk позволяет получать события со всего вк, и реализовано это через wss:// протоколНасколько я нагуглил, wss:// не поддерживается PHP по умолчанию
В общем делаю проект на Laravel с RestApi и vuejsВозврат products делаю с использованием ApiResource в Laravel