rx.Subscriber объект не может быть повторно использован после отписки? - PullRequest
0 голосов
/ 31 мая 2019

У меня есть такая конструкция (RxJava 1.3.x):

view().filter(view -> view != null).subscribe(subscriber);

Вот также определение view (). Он активно излучает View сущностей.

public Observable<View> view() {
    return views;
}

Вопрос: почему тривиальная реализация rx.Subscriber onNext (и дальнейшая передача в подписку) работает (то есть вызывается onNext), а эта - нет:

subscriber.unsubscribe();
view().filter(view -> view != null).subscribe(subscriber);

1 Ответ

2 голосов
/ 05 июня 2019

1.x Subscriber находится в состоянии и после того, как вы отмените подписку, он немедленно откажется от любого использования в будущем.Вы должны создать новый экземпляр или использовать экземпляр интерфейса rx.Observer.

// as fields for example

Subscription subscripion;
Observer<View> observer = new Observer<View>() {
     @Override public void onNext(View t) { }
     @Override public void onError(Throwable t) { }
     @Override public void onCompleted() { }
});

// ...

if (subscription != null) subscription.unsubscribe();

subscription = view().filter(view -> view != null).subscribe(observer);
...