2017-02-10 70 views
1

我有一個android應用程序,它從websocket連接接收數據。這些數據存儲在Hashmap中,並且必須從應用程序的某些點中恢復。 我已經創建了一個「get」方法,該方法使Observable.just()具有該數據,但是,當從websocket接收到數據時,我需要另一個Observable.just(),以便第一個observable的訂戶可以接收更新數據,我該怎麼做?我是否必須創建一個Observable對象並始終對該可觀察對象執行「恰好」操作? 我必須如何發出數據才能始終爲同一用戶接收(與領域相同)?在android上創建一個可觀察的發射器

在此先感謝

回答

1

我需要另一個Observable.just()當從 的WebSocket接收到的數據,因此第一觀察到的用戶可以接收 更新的數據,應該怎麼做呢?

問題是你可能在找什麼。主體是可以與SubscriberObservable同時發揮作用的對象。如果您的get()返回Subject#asObservable而不是Observable.just,並且每次從WebSocket獲取新數據時您都會撥打Subject#onNext,您將得到所需的行爲。 Subject本身是抽象的,但RxJava提供了一些具體的實現。請參閱documentation以瞭解它們之間的差異,並選擇最適合您的那個。

2

RxJava有Hot Observables,在你的情況下你需要使用主題,將一個可觀測值的發射傳遞給另一個。

檢查該單元測試

/** 
* 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); 
} 

你可以看到熱觀測量這裏https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/connectable/HotObservable.java

的更多示例