【发布时间】:2017-01-10 23:41:28
【问题描述】:
我有Observable<FeaturedItemList> getFeatured(),每次打开页面时都会调用它。从同一页面上的两个不同组件调用此函数。由于它是从网络中检索的,因此我对其进行了缓存并使其与ReplaySubject 共享。
public Observable<FeaturedItemList> getFeatured() {
if(mFeaturedReplaySubject == null) {
mFeaturedReplaySubject = ReplaySubject.create();
getFromNetwork().subscribe(mFeaturedReplaySubject);
}
return mFeaturedReplaySubject;
}
然后我意识到,当请求由于某些原因失败时,如果用户返回该页面,除非用户终止应用程序,否则它不会显示任何结果。所以我决定有一些重试逻辑。这是我的工作:
public Observable<FeaturedItemList> getFeatured() {
synchronized (this) {
if (mFeaturedReplaySubject == null) {
mFeaturedReplaySubject = ReplaySubject.create();
getFromNetwork().subscribe(mFeaturedReplaySubject);
return mFeaturedReplaySubject;
} else {
return mFeaturedReplaySubject.onErrorResumeNext(throwable -> {
mFeaturedReplaySubject = null;
return getFeatured();
});
}
}
}
虽然这行得通,但恐怕我在这里做的不好,因为这种方法无法涵盖这种情况。 有没有更好的办法?
为了分享可观察的使用主题,我在某处读到了可以使用connect()、publish() 和share(),但我不知道如何使用它。
【问题讨论】:
标签: java rx-java rx-android