public void become(AbstractPromise<T> other) { other.subject.subscribe(this); }
public void become(RxObserverAdapter<R> other) { other.subject.subscribe(this); }
ReplaySubject<Date> subject = ((MyApplication)getApplication()).getSubject(); subject.subscribe(...);
/** * Subscribes to an Observable and provides an Observer that implements functions to handle the items the * Observable emits and any error or completion notification it issues. * <dl> * <dt><b>Scheduler:</b></dt> * <dd>{@code subscribe} does not operate by default on a particular {@link Scheduler}.</dd> * </dl> * * @param observer * the Observer that will handle emissions and notifications from the Observable * @return a {@link Subscription} reference with which the {@link Observer} can stop receiving items before * the Observable has completed * @see <a href="http://reactivex.io/documentation/operators/subscribe.html">ReactiveX operators documentation: Subscribe</a> */ public Subscription subscribe(Observer<String> observer) { return subject.subscribe(observer); }
private ReplaySubject<ChangeNotification<InstanceInfo>> getInterestSubject(final Interest<InstanceInfo> interest) { ReplaySubject<ChangeNotification<InstanceInfo>> subject = notificationSubjects.get(interest); if (subject == null) { subject = ReplaySubject.create(); final ReplaySubject<ChangeNotification<InstanceInfo>> finalSubject = subject; fullRegistrySubject.subscribe(new Subscriber<ChangeNotification<InstanceInfo>>() { @Override public void onCompleted() { finalSubject.onCompleted(); } @Override public void onError(Throwable e) { finalSubject.onError(e); } @Override public void onNext(ChangeNotification<InstanceInfo> notification) { if (notification.isDataNotification() && interest.matches(notification.getData())) { finalSubject.onNext(notification); } } }); notificationSubjects.put(interest, subject); } return subject; } }
@Override public void run() { ReplaySubject<Integer> subject = ReplaySubject.create(); subject.onNext(1); subject.subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { log("Subscriber1:" + integer); } }); subject.onNext(2); subject.onNext(3); subject.subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { log("Subscriber2:" + integer); } }); subject.onNext(4); } });
@Override public void run() { try { ReplaySubject<Integer> subject = ReplaySubject.createWithTime(150, TimeUnit.MILLISECONDS, Schedulers.immediate()); subject.onNext(1); Thread.sleep(100); subject.onNext(2); Thread.sleep(100); subject.onNext(3); subject.subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { log("" + integer); } }); subject.onNext(4); } catch (InterruptedException e) { log("error:" + e.getMessage()); } } });
r.onNext("1"); r.onNext("2"); r.subscribe(new Action1<String>() { @Override public void call(String s) { r.onNext(2); r.onNext(3); r.subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Thread.sleep(100); r.onNext(3); r.subscribe(new Action1<Integer>() { @Override public void call(Integer integer) {
@OnClick(R.id.replay_subject_default) public void onReplaySubjectDefault() { unsubscribe(); createSubscription(); ReplaySubject<Stock> stockReplaySubject = ReplaySubject.create(); stockReplaySubject.onNext(new Stock(GOOG, 715.09)); stockReplaySubject.onNext(new Stock(GOOG, 716.00)); stockReplaySubject.onNext(new Stock(GOOG, 714.00)); Subscription defaultSub = stockReplaySubject.subscribe(getDefaultSubscriber()); compositeSubscription.add(defaultSub); // All three values will be delivered. stockReplaySubject.onNext(new Stock(GOOG, 720)); stockReplaySubject.onCompleted(); // Terminate the stream with a completed event. // Subscribe again, this time the subscriber will get all events and the terminal event // right away. All items are "replayed" even though the stream has completed. Subscription tardySubscription = stockReplaySubject.subscribe(getTardySubscriber()); compositeSubscription.add(tardySubscription); }
@OnClick(R.id.replay_subject_sized) public void onReplaySubjectSizedClick() { unsubscribe(); createSubscription(); // A replay subject that will only replay the last two items. ReplaySubject<Stock> stockReplaySubject = ReplaySubject.createWithSize(2); stockReplaySubject.onNext(new Stock(GOOG, 715.09)); stockReplaySubject.onNext(new Stock(GOOG, 716.00)); stockReplaySubject.onNext(new Stock(GOOG, 714.00)); // Only the last two items will be replayed to this subscriber (716 and 714) Subscription defaultSub = stockReplaySubject.subscribe(getDefaultSubscriber()); compositeSubscription.add(defaultSub); // All three values will be delivered. // This will also be emitted to the defaultSub above. stockReplaySubject.onNext(new Stock(GOOG, 720)); stockReplaySubject.onCompleted(); // Terminate the stream with a completed event. // Subscribe again, this time the subscriber will get the last two events and the terminal // event right away. The last two items are "replayed" even though the stream has completed. Subscription tardySubscription = stockReplaySubject.subscribe(getTardySubscriber()); compositeSubscription.add(tardySubscription); }