【问题标题】:save and get the cache data from disk in RxJava在 RxJava 中保存并从磁盘获取缓存数据
【发布时间】:2015-11-30 23:29:43
【问题描述】:

我在我的应用程序中使用 Rx 来执行 api 调用,我期待按以下顺序执行此操作

  1. 检查是否有互联网连接
  2. 如果为真(从 1 开始),调用 api 获取结果
  3. 然后将结果保存到磁盘缓存中
  4. 如果为 false(从 1 开始)发送错误通知并从磁盘缓存加载数据。

为此,我有 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之前如何检查互联网连接?

非常感谢

【问题讨论】:

  • 我在序列中看不到任何会阻止将 API 调用结果保存到磁盘的原因。保存可能会失败(权限错误、锁定文件等)并且 onErrorResumeNext 隐藏了这个事实。如果你不关心异常的原因,想继续缓存数据,onErrorResumeNext 是可以接受的。
  • 除了 onErrorResumeNext 之外,还有什么可以使用的选项。还有我如何在调用 api 之前检查互联网连接
  • 我不懂Android,所以无法帮助网络测试。

标签: android rx-java rx-android


【解决方案1】:

你不应该把所有东西混合到一个单独的 observable 中。 请阅读这篇文章,解释如何拆分这些东西。 http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    相关资源
    最近更新 更多