1. 程式人生 > >RxJava系列之一 初識Rxjava

RxJava系列之一 初識Rxjava

1.簡介

基礎知識

響應式程式碼的基本組成部分是Observables和Subscribers(事實上Observer才是最小的構建塊,但實踐中使用最多的是Subscriber,因為Subscriber才是和Observables的對應的。)。
Observable傳送訊息,而Subscriber則用於消費訊息。訊息的傳送是有固定模式的。Observable可以傳送任意數量的訊息(包括空訊息),
當訊息被成功處理或者出錯時,流程結束。Observable會呼叫它的每個Subscriber的Subscriber.onNext()函式,並最終以Subscriber.onComplete()或者Subscriber.onError()結束。
這看起來像標準的觀察者模式, 但不同的一個關鍵點是:Observables一般只有等到有Subscriber訂閱它,
才會開始傳送訊息(術語上講就是熱啟動Observable和冷啟動Observable。熱啟動Observable任何時候都會發送訊息,
即使沒有任何觀察者監聽它。冷啟動Observable只有在至少有一個訂閱者的時候才會傳送訊息(我的例子中都是隻有一個訂閱者)。這個區別對於開始學習RxJava來說並不重要。)。
換句話說,如果沒有訂閱者觀察它,那麼將不會起什麼作用。

2.第一個Rxjava 程式

好了,想要在專案中使用rxjava, 只需要通過在gradle中新增如下:
compile’io.reactivex:rxjava:1.0.13’ 目前最新版本 (本人使用的是gradle,大家可以通過github檢視rxjava的其他部署)

先來寫個小例項:

(這裡只貼上了部分程式碼全部程式碼請看文章底部)通過RxJava給TextView 設定內容。(這裡只是做個演示,並沒什麼卵用)
先建立Observable

 private Observable<String> cerateObserver() {
        return
Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("第一個RxJava"); subscriber.onCompleted(); } }); } 再建立一個 Subscriber private
Subscriber<String> createSubscriber() { return new Subscriber<String>() { @Override public void onCompleted() { Log.i(TAG, "on completed"); } @Override public void onError(Throwable e) { Log.i(TAG, "on error"); } @Override public void onNext(String s) { Log.i(TAG, "next Value = " + s); mTextView.setText(s); } }; } //最後把他兩繫結一下。 observable.subscribe(subscriber);

OK,效果圖出來了。
這裡寫圖片描述

為了列印那幾個字寫那麼多程式碼也是醉了。
好吧, 下面看看更簡潔的程式碼。

 //下面的程式碼乍一看可能難以接受, 慢慢來
        Observable.just("第二個RxjavaDemo").subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                    mTextView.setText(s);
            }
        });

從上面的程式碼中,我們用到了兩個新的東西
1. Observer的just 和 Action1

其實 Observer為我們提供了很多便捷的快速操作。而just的作用是隻傳送一次任務,然後結束。而Action我們可以理解為Subscriber的其中一個子部分。
比如: Subscriber裡有三個函式 onCompleted onError onNext我們可以把它們理解為三個Action
而Action1代表的是隻有一個引數, 類似推理: 會不會有Action2, Action3 等等呢, 等待著大家去發掘
當然,如果大家用的jdk是1.8 的話,可以通過lambdas表示式來優化程式碼:

Observable.just("第二個RxJavaDemo lambdas").subscribe(t -> mTextView.setText(t));

是不是瞬間感覺碉堡了。

好了,我們已經學會了just的用法。

其實 Observable提供了大量的Operators來簡化我們程式碼的寫法。
操作符的作用是在Observable和最終的Subscriber之間修改Observable發出的事件。

下面我們將介紹到:map操作符的簡單用法map操作符的作用就是將一個事件轉換成另一個事件。
舉個例子, 比如說: 伺服器現在返回了一段字串,我需要將字串重新拼接成新的字串,並載入資料。
這時,我們就可以通過map操作。

Observable.just(url).map(new Func1<String, String>() {
            @Override
            public String call(String s) {
                return "http://www.baidu.com/" + s;
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                mTextView.setText(s);
            }
        });
        //如果你有lamdba
        Observable.just(url).map(f -> "http://www.baidu.com/" + f).subscribe(t -> mTextView.setText(t));

map操作符的特點是: 你傳遞一個Observable物件給他, 他返回你一個Observable物件, 但是不需要對應Observable的返回型別。下一節我們將詳細的介紹map的操作,並且順帶著會通過RxJava的衍伸版RxAndroid來寫一個最簡單的網路請求。敬請期待。。。
(文章內容參考了官方,以及其他幾位大神的作品)

原始碼地址:點選進入

歡迎關注我的微信公眾號:androidesigner
通過微信掃描二維碼即可關注。
二維碼