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("序列結束");
    }
};


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