我正在尝试实现一个使用可观察的发出更改的类。当对此可观察对象完成订阅时,我想发送一个启动/初始化事件。然后我想发送通常的事件。
例如假设我有两个不同的订户A和B。A和B在不同的时间开始订阅。如果是MyClass。getChanges()发出事件1、2、3、4和5。
如果A在事件1、2之间启动it订阅,则应接收以下事件:InitialEvent、2、3、4、5。
如果B在事件4和5之间启动it订阅,则B应接收以下事件:InitialEvent,5。
如何使用RxJava做到这一点?
谢谢
编辑1
我想我需要解释一下,“InitialEvent”每次发出时都是不同的。每次新订阅者开始从getChanged()订阅时,它都由MyClass计算。
我的场景是MyClass包含一个列表。“initialEvent”包含订阅完成时的列表。然后,对该列表的每个更改都从getChanges()发出。
可能不是很优雅的方式仅仅使用一面旗帜怎么样?看起来您只想替换第一个发出的事件。
e、 g.对于一个订阅,以下逻辑:
boolean firstTimeA = true;
myCustomObservable.subscribe(s -> {
System.out.println(firstTimeA ? "initEvent" : s.toString());
if(firstTimeA) firstTimeA = false;
});
由于您想拥有第二个订阅,只需创建firstTimeB
并将其更新为您的B订阅。
你要找的是PublishSubject。受试者是热门的可观察对象,因为他们不会等到观察者订阅后才开始发出他们的项目。这里有一些关于主题的信息。
这是您的用例的快速演示
PublishSubject<String> subject = PublishSubject.create();
Observable<String> InitEvent = Observable.just("init");
Observable<String> A = subject.asObservable();
Observable<String> B = subject.asObservable();
subject.onNext("1");
A.startWith(InitEvent)
.subscribe(s -> System.out.println("A: " + s));
subject.onNext("2");
subject.onNext("3");
subject.onNext("4");
B.startWith(InitEvent)
.subscribe(s -> System.out.println("B: " + s));
subject.onNext("5");
很抱歉在两年后发布此消息,但我也有同样的需要,发现这个问题没有答案。
我所做的是:
public Observable<Event> observe() {
return Observable.defer(() ->
subject.startWith(createInitialEvent())
);
}
想法如下:
因此,如果我回到原来的帖子:如果观察者在事件1,2之间启动它的订阅,那么它应该接收以下事件:InitialEvent,2,3,4,5。
我正在使用AngularFire作为Angular11上firebase的API。 我的应用程序的域名是实时拍卖 理想情况下,我想做的是阅读所有文档,然后订阅每个文档以进行更改。 我目前的问题是我在firestore上的阅读次数。 我的收藏阅读将产生N次阅读。但订阅每个文档会产生额外的读取,因此默认情况下会有2N次读取,这似乎是不可避免的。 但我想这比在集合上留下订阅并在每次更新集合中的内容时接收
我将在一个Android应用程序中用替换模式。我有事件来提醒任何感兴趣的方面我的缓存中的数据更新单例。任何时候调用web服务,都将更新数据,并通过发布的事件向订阅者发出警报。 我在RxJava中使用设置了与此类似的内容。观察者从subject获得单个事件,但随后获得事件并取消订阅。这在UI第一次加载时起作用,但当需要刷新数据时,不会通知订阅者。如何告诉这些继续监听下一个事件?
可将PS Vita的开始画面恢复为购买时的状态。 轻触[初始化]>[初始化开始画面的图像]>[初始化]。
据我所知,在Java11中,这两个操作可以在一行中完成,不是吗?
我正在学习RxJava,已经阅读了几篇文章和视频。我对RxJava所能提供的东西感到非常棒,所以我认为目前我已经了解了反应式编程的含义。Dan Lew的这篇教程在一定程度上帮助我理解了使用RxJava的基础知识。但我发现,我越是认为自己已经完全理解RxJava,我脑海中浮现的问题就越多。 由于我是一个在编写代码时学得最多的人,下面是我要做的。我已经有了一个利用SQLite的应用程序。我的应用程序有
问题内容: 我正在使用RxJava计算Android中某些传感器数据的标准化自动相关性。奇怪的是,我的代码引发了一个异常(“ java.lang.IllegalStateException:只允许一个订阅者!”),我不确定该怎么做:我知道GroupedObservables订阅多个订阅者时可能会抛出此异常,但是我不认为我在任何地方都在使用这种东西。 在下面,您找到(最有可能)触发异常的方法: 这是