我在我的应用程序中使用Rx执行api调用,我期待按以下顺序执行此操作
因为我有Observable从磁盘缓存中获取存储的数据:
@Override
public Observable<StoryCollectionEntity> getStroty(String id) {
return Observable.create(new Observable.OnSubscribe<StoryCollectionEntity>() {
@Override
public void call(Subscriber<? super StoryCollectionEntity> subscriber) {
//readFileContent
//deserializeS fileContent
subscriber.onNext(storyCollectionEntity);
subscriber.onCompleted();
subscriber.onError()
}
});
}
还要将以下内容保存在磁盘中:
@Override
public void putStory(StoryCollectionEntity storyCollectionEntity) {
// save in the disk
}
我成功地能够保存和检索数据但感觉我的代码不够好,因为有时从api重新获取的数据没有保存在磁盘缓存中 我也在调用onErrorResumeNext上的缓存数据,我觉得这是错误的。
这是我的代码:
@Override
public Observable<StoryCollectionEntity> storyEntityList() {
return this.restApi.storyCollection()
.doOnNext(saveStoryCollectionToCache)
.onErrorResumeNext(
storyCache.getStroty(StoryCollectionEntity.class.getName()));
}
此处saveStoryCollectionToCache
是:
private final Action1<StoryCollectionEntity> saveStoryCollectionToCache =
storyCollectionEntity ->
{
if (storyCollectionEntity != null) {
storyCache.putStory(storyCollectionEntity);
} };
请您帮忙了解如何在我的案例中实现最佳实施。我怎样才能在调用restApi之前检查互联网连接?
非常感谢
答案 0 :(得分:3)
你不应该将everithing混合到一个可观察者中。 请阅读这篇文章,解释如何拆分这些东西。 http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/