java - RxJava : How to send some additional info to subscriber

标签 java android rx-java

我创建了一个简单的方法,它将消息(作为 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,目标是发送项目到主题。主题将由方法中的第二个参数返回)

Method call

在另一个 Android Component Class(继承自 Linear Layout )中,这条消息将被消费如下。如果我可以获得其他信息,即 200, 300 ,我将过滤掉并将 onNext() 放入其中。这是我能想到的解决方案,但是 RxJava 专家可能会提供一个很好的解决方案。

consume message

答案:

附加信息如下通过 onNext() 传递,订阅者将使用 if (object instanceof Integer) 检查并放置逻辑以获取 next onNext() 返回的下一个值

Result

最佳答案

首先,我不会使用 Object 作为参数/消息类型,因为它太通用了。创建一些基类,比如 Item,携带基本信息。

其次,创建 Item 的子类,例如 MenuItemButtonItemParametrizedItem 等。每个子类型都可以携带额外的信息。

第三,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);

现在每个特定的订阅者都知道它将接收什么子类型的项目,它可以安全地转换为该子类型,并提取与该子类型相关的附加信息。

关于java - RxJava : How to send some additional info to subscriber,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41660405/

相关文章:

rx-java - 为什么RxJava中没有 `Single#doOnTerminate`方法?

android - BlockingGet 阻止 UI 线程 RxJava 2

java - 如何用 Selenium 向右或向左滑动?

android - 获取android中选择的偏好值

android - android 中 google map v2 右上角的罗盘位置

android - 保存小部件状态

java - 无限扩展 Rx Singles zip

java - Java/MySql如何实现基于角色的访问控制?

java - 语句进入下一行

java - 我想通过滑动来查找/定位 IOS 应用程序中存在的元素