RxCache - 防止被观察者被驱逐

时间:2017-05-12 13:35:38

标签: android rx-java rx-android

我在我的Android项目中使用RxCache,当用户没有互联网连接时我遇到了问题。

如果没有从服务器返回数据,有没有办法防止observable被驱逐?

例如,每次用户刷新新闻Feed(拉动刷新)getRepository().getFeedPosts(tag, new EvictProvider(true));都会被调用。

如果用户突然失去与互联网的连接并再次刷新Feed,则没有数据从服务器返回,observable被逐出并返回缓存版本(因为我设置useExpiredDataIfLoaderNotAvailable(true)在RxCache构建器上。)

再次没有互联网连接,如果用户第二次刷新,则没有缓存数据可用。

有没有办法防止这种情况发生?

由于

2 个答案:

答案 0 :(得分:0)

回答我自己的问题,我猜这是RxCache的限制。

这就是来自RxCache的Victor Albertos告诉我的事情:

  

我不认为这是可能的。确切地说,这是通过创建一个刚刚抛出的可观察量来驱逐某些提供者的数据的方式。我承认这不是最佳选择,但如果您想使用更成熟的API来正确处理这些情况,我建议您使用ReactiveCache

答案 1 :(得分:0)

我遇到了完全相同的问题,最后只是添加了一个互联网可用性检查来判断缓存是否应该失效。

let newSet = CharacterSet(charactersIn: "a")
// let newSet = CharacterSet(charactersIn: "\(character)")
print(newSet.isSubset(of: CharacterSet.decimalDigits)) // false
print(newSet.isSubset(of: CharacterSet.alphanumerics)) // true

与我的缓存api调用一起使用:

public Boolean isOnline() {
    MyApplication application = MyApplication.sharedApplication();
    ConnectivityManager cm =
            (ConnectivityManager) application.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting();
}

这可以确保如果我的应用程序处于脱机状态,它将获得缓存的结果。如果它在线,它将始终从服务器获得当前参加聚会的人员列表。