搜索

首页  >  问答  >  正文

android - rxjava 条件判断

我想实现这样一个功能,用户点击获取数据库数据,若数据库有这个数据,则直接显示本地的,若数据库没有这个数据,就从服务器请求再显示出来。
请问一下用rxjava要怎么写呢?

PHP中文网PHP中文网2812 天前637

全部回复(3)我来回复

  • PHP中文网

    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);
        });

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 17:54:11

    雷雷

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:54:11

    雷雷

    回复
    0
  • 取消回复