2017-02-10 29 views
1

У меня есть приложение для Android, которое получает данные из подключения к сети. Эти данные хранятся в Hashmap и должны быть восстановлены из некоторых точек приложения. Я создал метод «get», который делает Observable.just() с этими данными, однако мне нужно другое Observable.just(), когда данные получены из websocket, чтобы подписчик первого наблюдаемого мог получать обновленные данные, как мне это сделать? Должен ли я создавать объект Observable и всегда делать «справедливое» для наблюдаемого? Как я должен испускать данные, чтобы всегда получать их для одного и того же абонента (так же, как это имеет место)?Создайте наблюдаемый излучатель на android

Заранее спасибо

ответ

1

мне нужен другой Observable.just(), когда данные, полученные от WebSocket поэтому абонент первым наблюдаемым может получить обновленные данные, как я должен делать это?

Тема, что вы, вероятно, ищете. Объектом является объект, который может действовать одновременно с Subscriber и Observable. Если ваш get() возвращает Subject#asObservable вместо Observable.just, и каждый раз, когда вы получаете свежие данные с вашего веб-сайта, вы вызываете Subject#onNext, вы получите желаемое поведение. Subject сам является абстрактным, но RxJava содержит некоторые конкретные реализации. Пожалуйста, обратитесь к documentation, чтобы понять разницу между ними и выбрать тот, который вам подходит.

2

RxJava имеет горячие наблюдатели, в вашем случае вам нужно использовать объект, чтобы передать излучение одного наблюдаемого другому.

проверить этот блок тест

/** 
* 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