在android上创建一个可观察的发射器

时间:2017-02-10 08:13:42

标签: android rx-java observable observer-pattern rx-android

我有一个android应用程序,它从websocket连接接收数据。此数据存储在Hashmap中,必须从应用程序的某些点恢复。 我创建了一个“get”方法,使用该数据生成Observable.just(),但是,当从websocket接收数据时,我需要另一个Observable.just(),以便第一个observable的订阅者可以接收更新的数据,我该怎么办?我是否必须创建一个Observable对象并始终对该observable执行“just”操作? 我必须如何发送数据才能始终为同一个用户接收数据(与领域相同)?

提前致谢

2 个答案:

答案 0 :(得分:2)

RxJava有Hot Observables,在你的情况下你需要使用subject,将一个observable的发射传递给另一个。

检查此单元测试

/**
 * In this example we see how using hot observables ReplaySubject we can emit an item on broadcast to all the observers(subscribers).
 *
 * @throws InterruptedException
 */
@Test
public void testHotObservableUsingReplaySubject2() throws InterruptedException {
    Observable<Long> interval = Observable.interval(100L, TimeUnit.MILLISECONDS);
    Subject<Long, Long> publishSubject = ReplaySubject.create(1);
    interval.subscribe(publishSubject);
    Thread.sleep(1000L);
    publishSubject.subscribe(System.out::println, (e) -> System.err.println(e.getMessage()), System.out::println);
}

您可以在此处查看更多Hot Observable的示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/connectable/HotObservable.java

答案 1 :(得分:1)

  

当收到数据时,我需要另一个Observable.just()   websocket所以第一个可观察者的用户可以接收到   更新的数据,我该怎么做?

主题是你可能正在寻找的东西。 Subject是一个可以与SubscriberObservable同时执行的对象。如果你的get()返回Subject#asObservable而不是Observable.just,并且每当你从websocket获得新数据时,你就会调用Subject#onNext,你将获得所需的行为。 Subject本身是抽象的,但RxJava提供了一些具体的实现。请参阅documentation以了解它们之间的区别,并选择最适合您的方式。