RxJava的基本使用

TamaraICX 7年前發布 | 8K 次閱讀 RxJava 安卓開發

RxJava響應式函數編程也在Android開發中流行起來了,最大的好處的話就是,在程序邏輯異常復雜的情況下,仍然可以讓代碼的邏輯保持簡潔.

現在就簡單的介紹一下它的使用首先添加Rx相關的依賴

compile 'io.reactivex:rxjava:1.2.4'

compile 'io.reactivex:rxandroid:1.2.1'

Button監聽事件.png

RxJava.png

RxJava里面的被觀察者Observable ,觀察者Observer之間的關系,就像Button點擊監聽類似,Button通過setOnClickListener將Button與OnClickListener聯系起來了.一旦Button被點擊,OnClickListener就會執行onClick()方法,

同樣的RxJava里面的Observable 通過subscribe 與Observer建立聯系,一旦Observable 有觸發一下操作,就會對應的執行onNext(),onCompleted();或者onNext(), onError():

* onNext():普通事件
    * onCompleted():事件隊列完結
    * onError(): 事件隊列異常

借用之前有個大神和我說的一個案例,現有一個數組 String[] arr ={"abcd", "bcde", "cdef"}, 把其中以字母"a"開頭的字符串找出來并加上"from Alpha",最后打印出新的字符串的長度

普通方法我們做法是這樣的,

for (int i = 0; i < arr.length; i++) {
          String temp = arr[i];
          if (temp.startsWith("a")) {
              temp += " from Alpha";
              System.out.println("traditional:" + temp + temp.length());
          }

用RxJava寫的話就是這樣,而且這里Observer實際執行的方法的話就是onNext(),onCompleted();

Observable.from(arr)
     //過濾
     .filter(new Func1<String, Boolean>() {
         @Override
         public Boolean call(String s) {
             return s.startsWith("a");
         }
         //訂閱關聯
     })
     .subscribe(new Observer<String>() {
         @Override
         public void onCompleted() {
         }
         @Override
         public void onError(Throwable e) {
         }
         @Override
         public void onNext(String s) {
             //參數列表中的s就是數組arr中過濾出來滿足條件的字符串了
             String temp = s += " from Alpha";
             System.out.println("RxJava:" + temp + temp.length());
         }
     });

為了方便理解,我就舉個例子(呵呵,就不用買栗子了,雖然有點強行,應該比直接看代碼好理解),

Observable(被觀察者)就像小偷,Observer(觀察者)就像警察

首先小偷的關注的是美女的背包,在意的是背包里面的錢包,然后從背包挑出(filter)錢包,最后被警察觀察到了(subscribe),然后(onNext)警察做出回應,逮捕小偷,得到小偷偷走的錢包

所以最后代碼表示的話就是這樣

小偷.from(美女背包)
//通過過濾器判斷
     .filter(new Func1<物品, 是否是錢包>() {
         @Override
         public Boolean call(物品 s) {
             return 通過對物品觀察觸摸,判斷是否為錢包;
         }
         //訂閱關聯
     })
     .subscribe(new 警察<物品>() {
         @Override
         public void onCompleted() {
         }
         @Override
         public void onError(Throwable e) {
         }
         @Override
         public void onNext(物品s) {
             //參數列表中的s就是美女背包中挑選出來的錢包了
        最后將得到的錢吧交回美女失主,然后和警察一起回警察局做筆錄
       ,然后美女愛上了警察...然后就沒有然后了.....(自己YY去吧);
         }
     });
  • 需要注意的是這里onNext()方法可能會執行多次如果數組arr里面有多個滿足條件的字符串就會執行多次當然沒有滿足條件的就不會執行,但是onCompleted():事件隊列完結方法只會執行一次
  • 相信有了上面的例子已經對RxJava有個大概印象了,

    現在總結下步驟吧:

    1.創建Observable(被觀察者)

    Observable.just(T...) 參數為單個的

    Observable.from(T[]) / Observable.from(Iterable<? extends T>) 參數為數組或Iterable

    由于是數組所以用的是from().

    2.filter(過濾器)

    3.Observer(觀察者)

    4.subscribe(訂閱,建立聯系)

    如果只想關心onNext方法可以直接用Action1,這樣代碼會簡潔很多

    observable.subscribe(observer);
    Observable.from(arr)
        .filter(new Func1<String, Boolean>() {
            @Override
            public Boolean call(String s) {
                return s.startsWith("a");
            }
        })
        .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                String temp = s += " from Alpha";
                System.out.println("RxJava:" + temp + temp.length());
            }
        });

    當然這只是一點基本使用.

     

 

來自:http://www.jianshu.com/p/5bb2446bde3f

 

 本文由用戶 TamaraICX 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!