我刚刚开始学习RxJava并思考反应。 我找到了一些文章(7个提示),说主题应该只作为最后的手段或第一个实现,我一直在想.. 截至目前,我有一个PublishSubject
PublishSubject.create()
.scan(0, (a, b) -> a + 1).subscribe(replaySubject)
每次将值递增1,并由replaySubject
订阅ReplaySubject.create();
只打印值。所以一开始我有0,然后在每PublishSubject.onNext
我增加值,所以我得到1,2等因为它的replaySubject我得到了整个链。
但是我一直在想是否可以在没有主题的情况下完成这项工作?我一直在阅读RxJava Wiki和运营商,但我无法弄清楚这是怎么做的。
所以我试图建立的伪代码以某种方式有一个以1开头的可观察量
Observable.just(1)
现在我有点击监听器
OnClick{ }
每次我点击某个按钮,我想看到之前的所有数字+ 1,所以1然后是1,2,接下来是1,2,3等等。
我一直在试用ConnectableObservator.replay
,但这根本没有成功。在内部监听器中,我试图首先在我的Observable上添加扫描以增加值,然后订阅以便我可以打印它。但这也不起作用。该死的我觉得我在一个黑角落里,误解了可观察的想法...
答案 0 :(得分:5)
由于您正在编写Android应用程序,因此可以使用RxAndroid。这是一个例子,
Observable.just(1).flatMap(new Func1<Integer, Observable<Integer>>() {
@Override
public Observable<Integer> call(Integer initialValue) {
return ViewObservable.clicks(button, false)
.subscribeOn(AndroidSchedulers.mainThread())
.scan(initialValue, new Func2<Integer, View, Integer>() {
@Override
public Integer call(Integer integer, View v) {
return integer + 1;
}
});
}
}).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
});
我不确定它是不是你想要的。也许你只需要:
ViewObservable.clicks(button, false)
.subscribeOn(AndroidSchedulers.mainThread())
.scan(1, new Func2<Integer, View, Integer>() {
@Override
public Integer call(Integer integer, View v) {
return integer + 1;
}
}).subscribe(new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onNext(Integer integer) {
System.out.println(integer);
}
});