Skip to content

Instantly share code, notes, and snippets.

@egor-n
Created December 1, 2014 13:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save egor-n/581c54db79bd1c1defed to your computer and use it in GitHub Desktop.
Save egor-n/581c54db79bd1c1defed to your computer and use it in GitHub Desktop.
RxJava caching
private PublishSubject<Data> dataRequest;
private Data data;
// ...
Subscription getData(Observer<Data> observer) {
if (data != null) {
observer.onNext(data);
}
if (dataRequest != null) {
return dataRequest.subscribe(observer);
}
dataRequest = PublishSubject.create();
Subscription subscription = dataRequest.subscribe(observer);
dataRequest.subscribe(new EndObserver<Data>() {
@Override
public void onEnd() {
dataRequest = null;
}
@Override
public void onNext(Data data1) {
data = data1;
}
});
apiService.data()
.map(this::cache)
.subscribeOn(ioScheduler)
.observeOn(uiScheduler)
.subscribe(dataRequest);
return subscription;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment