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
通過微信掃描二維碼即可關注。
二維碼

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