我正在尝试找出一种更好的方法来实现 Android 中 RxJava 中的存储库模式之类的功能。
这是我到目前为止所拥有的:(从here https://gist.github.com/pieces029/5e92f9003fa1a4ebc59b)
public Subscription getData(Observer<Data> observer, boolean refresh) {
Subscription sub = null;
Data cached = getCachedData();
if(cached != null) {
observer.onNext(cached);
if(refresh) {
sub = requestNetwork().subscribe(observer);
} else {
observer.onCompleted();
}
} else {
sub = requestNetwork().subscribe(observer);
}
return sub;
}
基本上它会检查是否存储了缓存数据,如果没有,它将发出网络请求。它还具有refresh
布尔参数强制它始终发出网络请求。
问题(或不是)是,这个函数的调用者需要调用它才会收到Subscription
代替Observable
,我不能再链接了。
有没有办法让函数返回Observable
但仍然有存储库模式?
感谢 akarnokd 指出我本文 http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/作者:丹·卢。
我的最终代码:
public Observable<Data> getData(boolean refresh) {
Observable<Data> obs = Observable.concat(getCache(), requestNetwork());
if(!refresh) {
obs = obs.first(data -> data != null);
}
return obs;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)