RxJava科目有必要吗?
Posted
技术标签:
【中文标题】RxJava科目有必要吗?【英文标题】:RxJava subjects are necessary? 【发布时间】:2014-10-12 21:34:42 【问题描述】:我刚刚开始学习 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
Observable.just(1)
现在我确实有点击监听器
OnClick
每次我点击某个按钮时,我都想查看所有以前的数字 + 1,所以 1 然后是 1,然后是 2,然后是 1、2、3 等等。
我一直在尝试ConnectableObservator.replay
,但这根本没有成功。在侦听器内部,我一直在尝试首先在我的 Observable 上添加扫描以增加价值,然后订阅以便我可以打印它。但这也不起作用。该死的,我认为我在一个黑暗的角落,误解了 observables 的概念......
【问题讨论】:
你想重播PublishSubject
的项目吗?
我想消除 PublishSubject 和 ReplaySubject,因为我可以通过某种方式将我的值从 0 增加到 x 让我们说鼠标单击
为什么observable.scan(0, (a, b) -> a + 1)
不起作用?
确实如此,但假设我有Observable.just(0)
和一个按钮点击事件,现在我有一个订阅者订阅我的Observable
并打印它的值。所以它打印 0。现在我在每次按钮单击时都想增加该值并将其发送给所有订阅者,我可能还不了解整个想法
你有按钮点击事件的 Observable 吗?也许你可以写一些伪代码来帮助我们理解你的情况。
【参考方案1】:
由于您正在编写一个 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);
);
【讨论】:
以上是关于RxJava科目有必要吗?的主要内容,如果未能解决你的问题,请参考以下文章
干掉RxJava系列--1. 手写权限请求替代RxPermission