【发布时间】:2018-06-29 19:59:26
【问题描述】:
我正在使用改造和 rxjava 创建一个存储库,如果之前没有检索到任何数据,它将调用网络,如果存在则从内存中返回缓存。
但是,如果您同时调用存储库,它会失败,它会多次调用网络。这是我目前的解决方案,存储库是一个单例并存储网络调用是否已经在进行中,如果是,则只返回可观察的内存。
IDatabaseInteractor databaseInteractor;
INetworkInteractor networkInteractor;
Data data;
boolean networkCallInProgress = false;
@Override
public Observable<Data> getData() {
Observable<Data> memoryObservable = data.getObservable();
Observable<Data> networkObservable;
//Sure this could be done in a better way...
if (!networkCallInProgress) {
getBoostersInPnetworkCallInProgressrogress = true;
networkObservable = networkInteractor.getBoosters().toObservable()
.doFinally(() -> networkCallInProgress = false);
} else {
networkObservable = Observable.empty();
}
return Observable.merge(memoryObservable, networkObservable)
.firstElement()
.toObservable()
.onErrorResumeNext((throwable) -> memoryObservable)
.flatMap(boosterData -> memoryObservable);
}
这可行,但有没有更优雅的解决方案使用 rxjava 来了解网络 observable 是否已经被调用?
【问题讨论】:
标签: java android rx-java retrofit2