Android开发Android知识

RxJava的基本使用

2016-12-28  本文已影响0人  朽木starrysky
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方法可以直接用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());
          }
      });

当然这只是一点基本使用.
练习Demo下载:https://github.com/starrysky0/RxjavaDemo

上一篇 下一篇

猜你喜欢

热点阅读