使用RxJava做三级缓存

使用RxJava的链式结构来实现三级缓存:

调用结构

  //会首先从缓存中获取结果,其次数据库,然后网络
  Observable.concat(getFromCache(), getFromDB(), getFromNet())
                .firstElement() //注意是取第一个返回的结果,不是第一个方法的结果
                .toObservable() //装换为Observable
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Integer e) throws Exception {
                        //具体类型可以根据实际需要跟换,这里使用Integer
                        Log.d(TAG, "accept: " + e);
                    }
                });

方法的实现:

  //这里只是模拟,具体实现根据实际需要进行替换
  private Observable getFromCache() {
        return Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                //当有数据返回的时候就调用onNext()方法
                //没有的数据返回就直接调用onComplete()方法,这样就会上面的调用结构就会去取getFromDB()方法的结果。下面情况类似
//                e.onNext(1);
                e.onComplete();
            }
        });
    }

    private Observable getFromDB() {
        return Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                e.onNext(2);
                e.onComplete();
            }
        });
    }

    private Observable getFromNet() {
        return Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
//                e.onNext(3);
                e.onComplete();
            }
        });
    }

你可能感兴趣的:(Android学习历程,Android,RxJava)