使用RxJava的链式结构来实现三级缓存:
调用结构
//会首先从缓存中获取结果,其次数据库,然后网络
Observable.concat(getFromCache(), getFromDB(), getFromNet())
.firstElement() //注意是取第一个返回的结果,不是第一个方法的结果
.toObservable() //装换为Observable
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer e) throws Exception {
//具体类型可以根据实际需要跟换,这里使用Integer
Log.d(TAG, "accept: " + e);
}
});
方法的实现:
//这里只是模拟,具体实现根据实际需要进行替换
private Observable<Integer> getFromCache() {
return Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
//当有数据返回的时候就调用onNext()方法
//没有的数据返回就直接调用onComplete()方法,这样就会上面的调用结构就会去取getFromDB()方法的结果。下面情况类似
// e.onNext(1);
e.onComplete();
}
});
}
private Observable<Integer> getFromDB() {
return Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
e.onNext(2);
e.onComplete();
}
});
}
private Observable<Integer> getFromNet() {
return Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> e) throws Exception {
// e.onNext(3);
e.onComplete();
}
});
}