[英]RXjava implement an observable for an object update
如何將 observable 添加到 Integer 對象,以便我收到每個對象更新的通知? 在這種情況下整數 = 0; 並且我希望每次添加示例 1 時都會收到通知。最初我只想記錄事件。 這是我到目前為止所擁有的,但我被卡住了。
代碼:
Subscriber<Integer> num = new Subscriber<Integer>() {
@Override
public void onNext(Integer num) { Log.d("RX", num.toString()); }
@Override
public void onError(Throwable e) { Log.d("RX", "error"); }
@Override
public void onCompleted() { Log.d("RX", "completed"); }
};
Observable.just(number)
/*.doOnNext(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.d("RX", "Updated integer" + integer.toString());
}
})*/
/*.flatMap(new Func1<Integer, Observable<?>>() {
@Override
public Observable<?> call(Integer integer) {
Log.d("RX", "Updated integer" + integer.toString());
return Observable.just(number);
}
})*/
.subscribe(num);
在不確切知道您要實現的目標的情況下,很難給出最佳答案,但您可以按照以下方式實現ObservableInteger
類:
public class ObservableInteger {
private Integer value;
private PublishSubject<Integer> subject = PublishSubject.create();
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
subject.onNext(value);
}
public Observable<Integer> getObservable() {
return subject.asObservable();
}
}
然后你可以訂閱它:
ObservableInteger obInt = new ObservableInteger();
Subscription s = obInt
.getObservable()
.subscribe(
integer -> {
// each time a new value is set
// it will be emitted here
},
Throwable::printStackTrace
);
我今天看到了這篇文章,並意識到它是為 RxJava1 編寫的。 RxJava 2 中有幾個變化。 其中一些影響上述樣本。 (.subscribe 返回一個 Disposable https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#subscription和 .asObservable() 現在是 .hide() 在 RxJava 2.0 https://github.com /ReactiveX/RxJava/wiki/What's-different-in-2.0#instance-methods )
這是 Jahnolds 回答的 RxJava2 兼容解決方案:
public class ObservableInteger {
private Integer value;
private PublishSubject<Integer> subject = PublishSubject.create();
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
subject.onNext(value);
}
public Observable<Integer> getObservable() {
return subject.hide();
}
}
並像這樣訂閱:
ObservableInteger obInt = new ObservableInteger();
Disposable d = obInt
.getObservable()
.subscribe(
integer -> {
// each time a new value is set
// it will be emitted here
},
Throwable::printStackTrace
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.