Rumah  >  Soal Jawab  >  teks badan

android - rxjava 条件判断

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

PHP中文网PHP中文网2741 hari yang lalu584

membalas semua(3)saya akan balas

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

    balas
    0
  • PHP中文网

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

    Observable.concat(Observable.just(null), Observable.just(1))
                    .filter(integer -> integer != null)
                    .take(1)
                    .subscribe(integer -> {
                        //TODO
                    });

    balas
    0
  • 大家讲道理

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

    Observable.if(
      () -> {
        return hasCache;
      },
      Observable.just(cache),
      Observable.just(database),
    );

    balas
    0
  • Batalbalas