我创建了一个简单的方法,它将消息(作为Object)发送给给定的主题。在另一端,订户将使用该对象。
我将为多个消费者使用相同的主题,因此发送消息时想要发送一些额外的信息,即200,300。因此,消费者可以过滤掉不相关的消息。但不知何故无法弄清楚如何做到这一点。
其他信息(int参数)可以postToSubject
方法和action1
处理,但不知道如何将其放在subject.onNext(object)
请建议您是否可以考虑任何解决方案。
public void postToSubject(Object object, Subject subject) {
Observable<Object> observable = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
subscriber.onNext(object);
subscriber.onCompleted();
}
});
observable.subscribe(new Action1() {
@Override
public void call(Object object) {
subject.onNext(object);
}
});
}
上面的方法如下调用(来自Android Activity,目标是将项目发送到主题。主题将由方法中的第二个参数返回)
在另一个Android组件类(继承自Linear Layout)时,此消息将被消耗如下。如果我可以得到额外的信息,即200,300,我将过滤掉并在其中放入onNext()。这是我能想到解决方案的方式,但是RxJava专家可能会给出一个很好的解决方案。
答案:
通过onNext()传递的附加信息如下所示,订阅者将使用if (object instanceof Integer)
进行检查并将逻辑设置为获取下一个onNext()返回的下一个值
答案 0 :(得分:0)
首先,我不会将Object
用作参数/消息类型,因为它太通用了。制作一些基类,比如说Item
,带有基本信息。
其次,创建Item
的子类,比如MenuItem
,ButtonItem
,ParametrizedItem
,等等。每个子类型都可以携带其他信息。
第三,postToSubject()
应该是这样的:
public void postToSubject(Item object, Subject<Item> subject) {
subject.onNext(object);
}
(不需要Observable.create
...)
第四,在消费者方面使用filter()
运营商:
subject
.filter(i -> i instanceof MenuItem)
.subscribe(menuItemSubscriber);
subject
.filter(i -> i instanceof ParametrizedItem)
.subscribe(paramertizedItemSubscriber);
现在每个特定订阅者都知道它将接收哪些子类型项,它可以安全地转换为该子类型,并提取与该子类型相关的其他信息。