rxjava基础使用

1.组成:
Observable:在观察者模式中称为“被观察者”;
Observer:观察者模式中的“观察者”,可接收Observable发送的数据;
subscribe:订阅,观察者与被观察者,通过subscribe()方法进行订阅;
Subscriber:也是一种观察者,在2.0中 它与Observer没什么实质的区别,不同的是 Subscriber要与Flowable(也是一种被观察者)联合使用,该部分内容是2.0新增的

2.关系:

RxJava 有四个基本概念:Observable (被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在完成某些操作,获得一些结果后,回调触发事件,即发出事件来通知 Observer。

3.使用:

RxJava用法多种多样,其多样性体现在Obserable(被观察者)的创建上。

case R.id.button:
    //基础方式
    Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(ObservableEmitter<String> e) throws Exception {
            //执行一些其他操作
            //.............
            //执行完毕,触发回调,通知观察者
            e.onNext("我来发射数据");
            e.onComplete();
        }
    });
    observable.subscribe(observer);
    break;
case R.id.button2:
    //just()方式
    //直接发送到next()
    Observable<String> observable1 = Observable.just("Hello");
    observable1.subscribe(observer);
    break;
case R.id.button3:
    //fromIterable()方式
    //发送集合到next()
    List<String> list = new ArrayList<String>();
    for (int i = 0; i < 10; i++) {
        list.add("Hello" + i);
    }
    Observable<String> observable2 = Observable.fromIterable((Iterable<String>) list);
    observable2.subscribe(observer);
    break;
case R.id.button4:
    //defer()方式
    //当观察者订阅时,才创建Observable,并且针对每个观察者创建都是一个新的Observable。
    // 以何种方式创建这个Observable对象,当满足回调条件后,就会进行相应的回调。
    Observable<String> observable3 = Observable.defer(new Callable<ObservableSource<? extends String>>() {
        @Override
        public ObservableSource<? extends String> call() throws Exception {
            return Observable.just("hello");
        }
    });
    observable3.subscribe(observer);
    break;
case R.id.button5:
    //定时发送
    Observable<Long> observable4 = Observable.interval(2, TimeUnit.SECONDS);
    observable4.safeSubscribe(observer1);
    break;
default:
case R.id.button6:
    //timer( )方式
    //延时发送
    Observable<Long> observable5 = Observable.timer(2, TimeUnit.SECONDS);
    observable5.safeSubscribe(observer1);
    break;
observer = new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    //观察者接收到通知,进行相关操作
    public void onNext(String aLong) {
        System.out.println("我接收到数据了");
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {
        System.out.println("序列结束");
    }
};

observer1 = new Observer<Long>() {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    //观察者接收到通知,进行相关操作
    public void onNext(Long aLong) {
        System.out.println("我接收到数据了" + aLong);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {
        System.out.println("序列结束");
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章