84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
我想实现这样一个功能,用户点击获取数据库数据,若数据库有这个数据,则直接显示本地的,若数据库没有这个数据,就从服务器请求再显示出来。请问一下用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.调用最后的方法