RxJava 初識

RxJava 基本實現


1) 創建 Observer

Observer 即觀察者,它決定事件觸發的時候將有怎樣的行爲。 RxJava 中的 Observer 接口的實現方式:

Observer<String> observer = new Observer<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

除了 Observer 接口之外,RxJava 還內置了一個實現了 Observer 的抽象類:Subscriber。 Subscriber 對 Observer 接口進行了一些擴展,但他們的基本使用方式是完全一樣的:

Subscriber<String> subscriber = new Subscriber<String>() {
    @Override
    public void onNext(String s) {
        Log.d(tag, "Item: " + s);
    }

    @Override
    public void onCompleted() {
        Log.d(tag, "Completed!");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(tag, "Error!");
    }
};

不僅基本使用方式一樣,實質上,在 RxJava 的 subscribe 過程中,Observer 也總是會先被轉換成一個 Subscriber 再使用。所以如果你只想使用基本功能,選擇 Observer 和 Subscriber 是完全一樣的。
2) 創建 Observable

Observable 即被觀察者,它決定什麼時候觸發事件以及觸發怎樣的事件。 RxJava 使用 create() 方法來創建一個 Observable ,併爲它定義事件觸發規則:

Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
    @Override
    public void call(Subscriber<? super String> subscriber) {
        subscriber.onNext("Hello");
        subscriber.onNext("Hi");
        subscriber.onNext("Aloha");
        subscriber.onCompleted();
    }
});

那麼怎麼才能夠應用呢,其實很簡單,只需要這樣

  //被觀察者訂閱觀察者(按自己的理解)
  observable.subscribe(observer);
  //或者
  observable.subscribe(subscriber);   //因爲subscriber是observe的抽象類,所以能夠採用這種寫法

3)採用 just(),或者from()的方式創建

  //採用just方式
   Observable.just("Hello","World")
            .subscribe(new Action1<String>() {
                        @Override
                        public void call(String s) {
                            Log.e("s",s);
                        }
                    });

//採用from方式
List<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
Observable.from(list)
          .subscribe(new Action1<String>() {
                      @Override
                      public void call(String s) {
                           Log.e("s",s);
                      }
                  });

這兩種方式得到的結果是一樣的。這樣我們可以實現一個簡單的使用RxJava讀取字符串的示例。

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