RxJava 的基本使用

概述 
RxJava 就是一个实现异步操作的库。它可以代替我们的 Handler,AsynTask。


简介 
RxJava 最核心的两个东西是 Observables(被观察者,事件源)和 Subscribers(观察者)。 

Observables 发出一系列事件,Subscribers 处理这些事件。 

一个 Observable 可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会 调用它的 Subscriber 的 onNext 方法,最后调用 Subscriber.onNext()或者 Subscriber.onError() 结束。 
注意:Rxjava 的看起来很想设计模式中的观察者模式,但是有一点明显不同,那就是如果一 个 Observerble 没有任何的的 Subscriber,那么这个 Observable 是不会发出任何事件的。

HelloWord 

首先关联包

compile 'io.reactivex:rxandroid:1.2.1'

compile 'io.reactivex:rxjava:1.1.6' 


//定义一个被观察者

Observable<String> myObservable = Observable.create( 
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
  //向观察者发出通知                 
sub.onNext("Hello, world!");                   
sub.onCompleted();               
    }           
  }       
); 


这里定义的 Observable 对象仅仅发出一个 Hello World 字符串,然后就结束了。

接着创建一个 Subscriber 来处理 Observable 对象发出的字符串。

  //观察者有三个方法     
  Subscriber<String> mySubscriber = new Subscriber<String>() {           
  @Override           
  public void onNext(String s) { 
  System.out.println(s); 
  }                  
  @Override           
  public void onCompleted() { }  
                 
   @Override           
   public void onError(Throwable e) { }      };   
 
//让观察者和被观察者产生关系  
myObservable.subscribe(mySubscriber); 

 //订阅后myObservable就是调用mySubscriber对象的onNext和onComplete方法, mySubscriber 就会打印出 Hello World! 

HelloWord 简化 

//RxJava 内置了很多简化创建 Observable 对象的函数,比如 Observable.just 创建只发出一 

//个事件就结束的 Observable 对象,可以简化为一行 

Observable<String> myObservable = Observable.just("Hello, world!"); 

// 接下来看看如何简化Subscriber,上面的例子中,我们其实并不关心OnComplete和OnError,

// 只需要在 onNext 的时候做一些处理,这时候就可以使用 Action1 类。 

  Action1<String> onNextAction = new Action1<String>() { 
   @Override           
   public void call(String s) {               
   System.out.println(s);           
       }       
   };  
 

subscribe 方法有一个重载版本,接受三个 Action1 类型的参数,分别对应 OnNext, OnComplete, OnError 函数。 

 //现在的     
 myObservable.subscribe(onNextAction);      
 //可以再整体简化         
 Observable.just("Hello, world!")        
 .subscribe(new Action1<String>() {               
 @Override               
 public void call(String s) {                     
 System.out.println(s);               
     }           
 });   
 
 

猜你喜欢

转载自www.cnblogs.com/yanglanwan/p/11291557.html