我有一个android应用程序,它从websocket连接接收数据。此数据存储在Hashmap中,必须从应用程序的某些点恢复。 我创建了一个“get”方法,使用该数据生成Observable.just(),但是,当从websocket接收数据时,我需要另一个Observable.just(),以便第一个observable的订阅者可以接收更新的数据,我该怎么办?我是否必须创建一个Observable对象并始终对该observable执行“just”操作? 我必须如何发送数据才能始终为同一个用户接收数据(与领域相同)?
提前致谢
答案 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是一个可以与Subscriber
和Observable
同时执行的对象。如果你的get()返回Subject#asObservable
而不是Observable.just
,并且每当你从websocket获得新数据时,你就会调用Subject#onNext
,你将获得所需的行为。 Subject
本身是抽象的,但RxJava
提供了一些具体的实现。请参阅documentation以了解它们之间的区别,并选择最适合您的方式。