84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
我想实现这样一个功能,用户点击获取数据库数据,若数据库有这个数据,则直接显示本地的,若数据库没有这个数据,就从服务器请求再显示出来。请问一下用rxjava要怎么写呢?
认证高级PHP讲师
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); });
Observable.concat(Observable.just(null), Observable.just(1)) .filter(integer -> integer != null) .take(1) .subscribe(integer -> { //TODO });
Observable.if( () -> { return hasCache; }, Observable.just(cache), Observable.just(database), );
1.先把功能函数写出来.
2.将阻塞方法转为RxJava的写法
3.合并到一起
4.调用最后的方法