Android工程師學RxJava(一):入門

RxJava是我在半年前研究MVP架構的時候看到的,當時不以爲然,沒有細看,後來在網上到處都能看到這個R君,我才發現原來它這麼流行。既然和R君這麼有緣,那我們就深入瞭解吧。

認識RxJava

之前使用過EventBus或者Otto的小夥伴可能應該能對RxJava的理解快一些,因爲很類似,編程模式都屬於觀察者模式。當然也少不了觀察者(Subscriber)和訂閱者(Observable),而RxJava最好用的地方之一就是鏈式編碼,把觀察者和訂閱之通過訂閱事件,串在一起,讓編碼的人感覺很”爽”!就像這樣下面的代碼,是打印出”robot”。

        final String name = "robot";
        Observable.just(name).subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Log.i("rxjava", s);
            }
        });

當然,還沒開始學RxJava,並不容易看懂,現在就是見個面,看見對方長得如此漂亮,自然想深入瞭解啊!

簡單用法

依賴引入,目前的最新版本:

 compile 'io.reactivex:rxjava:1.1.1'
 compile 'io.reactivex:rxandroid:1.1.0'

然後我們分步驟,先能上手,可以簡單使用RxJava。前文說過,我們需要觀察者,訂閱者,然後通過一個訂閱方法,把兩者連起來,就是Rxjava最基本的使用。所有就按照這個步驟:

1、創建觀察者(Subscriber):

Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i("rxjava", "completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("rxjava", "error");
            }

            @Override
            public void onNext(String s) {
                Log.i("rxjava", s);
            }
        };

看上面的代碼,要求複寫三個方法,其中”onNext”方法就是觀察者要執行的事件,類似OnClickListener裏面的OnClick方法。”onError”爲事件隊列異常執行的方法,”onCompleted”爲事件隊列完成實行的方法。

2、創建訂閱者(Observable):

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {

            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("robot");
                subscriber.onNext("rose");
                subscriber.onCompleted();
            }
        });

上面的代碼意思是會調用觀察者subscriber的onNext方法兩次,和onCompleted方法。

3、執行訂閱:

observable.subscribe(subscriber);

通過subscribe()方法把觀察者和訂閱者鏈接,那麼上述的事件就會執行了。

鏈式調用

那麼把上面的代碼寫在一起,就是我開頭舉得例子了,就是鏈式調用。

Observable.create(new Observable.OnSubscribe<String>() {

            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("robot");
                subscriber.onNext("rose");
                subscriber.onCompleted();
            }
        }).subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i("rxjava", "completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("rxjava", "error");
            }

            @Override
            public void onNext(String s) {
                Log.i("rxjava", s);
            }
        });

簡單的寫法

上面的訂閱者(Observable)在創建過程中使用了create()方法,當然這是最基本的創建方法,不過還有更簡單的辦法來完成Observable對象的創建:

 Observable observable = Observable.just("robot","rose");

使用just()方法和上面能達到一樣的效果,它將傳入的參數依次發送出去。還可以這麼寫:

String[] names = {"robot", "rose"};
Observable observable = Observable.from(names);

使用from()方法將傳入的數組或 Iterable 拆分成具體對象後,依次發送出去。
完整代碼:
just

Observable.just("robot","rose").subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i("rxjava", "completed");
            }

            @Override
            public void onError(Throwable e) {
                Log.e("rxjava", "error");
            }

            @Override
            public void onNext(String s) {
                Log.i("rxjava", s);
            }
        });

from

String[] names = {"robot", "rose"};
Observable.from(names).subscribe(new Subscriber<String>() {
   @Override
   public void onCompleted() {
       Log.i("rxjava", "completed");
   }

   @Override
   public void onError(Throwable e) {
       Log.e("rxjava", "error");
   }

   @Override
   public void onNext(String s) {
       Log.i("rxjava", s);
   }
});

寫到這裏,我們看到這個RxJava很簡單嘛,嘿嘿,其實難的還在後面呢,RxJava的真正用處在於異步操作的方便,所以後續我會繼續寫RxJava的異步操作,以及更強大的變換功能。

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