所以,我有一个基于UI交互提供params的Observable。我希望提取最后提供的params来自observable。是否有一种简洁的方法可以做到这一点,观察者永远不会结束(至少在它有订阅者之前)?
我尝试了不同的东西导致执行阻塞并等待Observable完成(这不会发生)。
考虑一下:
Integer last = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(1);
subscriber.onNext(2);
subscriber.onNext(3);
}
}).toBlocking().last();
答案 0 :(得分:1)
BehaviorSubject
正是您要找的。以下是用法示例:
private final BehaviorSubject<Integer> subject = BehaviorSubject.create(0);
private Observable<Integer> getUiElementValueAsObservable() {
return subject;
}
private void notifyUiElementValueChanged(final Integer value) {
subject.onNext(value);
}
private void performActionWithLastUiElementValue() {
getUiElementValueAsObservable().first().subscribe(new Action1<Integer>() {
@Override
public void call(final Integer integer) {
System.out.println("Current value " + integer);
}
});
}
private void run() {
// prints "Current value 0"
performActionWithLastUiElementValue();
notifyUiElementValueChanged(1);
notifyUiElementValueChanged(2);
notifyUiElementValueChanged(3);
// prints "Current value 3"
performActionWithLastUiElementValue();
}