我想实现这样一个功能,用户点击获取数据库数据,若数据库有这个数据,则直接显示本地的,若数据库没有这个数据,就从服务器请求再显示出来。
请问一下用rxjava要怎么写呢?
PHP中文网2017-04-17 17:54:11
1.先把功能函數寫出來.
private static Object loadFromCache(String key) {
//....本地缓存加载,如果加载失败返回 null
}
private static Object loadFromServer(String key) {
//....通过网络加载,返回数据
Object obj = ....
saveToCache(key, obj);//保存到本地缓存
return obj;
}
2.將阻塞方法轉換為RxJava的寫法
private static Observable<Object> rxLoadFromCache(String key) {
return Observable.fromCallable(() -> loadFromCache(key));
}
private static Observable<Object> rxLoadFromServer(String key) {
return Observable.fromCallable(() -> loadFromServer(key));
}
3.合併到一起
public static Observable<Object> rxLoad(String key) {
return Observable.concat(
rxLoadFromCache(key),
rxLoadFromServer(key)
).filter(obj -> obj != null)
.take(1);
}
4.呼叫最後的方法
rxLoad(key)
.subscribeOn(Schedulers.io())
.subscribe(obj->{
System.out.println(obj);
});