【响应式编程】RxJava介绍和基本使用

RxJava介绍和基本使用

介绍

RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。

基本使用

  1. 引入依赖
<dependency>
      <groupId>io.reactivex</groupId>
      <artifactId>rxjava</artifactId>
      <version>1.2.0</version>
    </dependency>
  1. 定义观察者和被观察者
@Test
    public void t1() {
          
   
        Observer observer = new Observer() {
          
   
            @Override
            public void onCompleted() {
          
   
                System.out.println("当被观察者生产Complete事件,调用该方法");
            }

            @Override
            public void onError(Throwable throwable) {
          
   
                System.out.println("对Error事件作出响应");
            }

            @Override
            public void onNext(Object o) {
          
   
                System.out.println("对Next事件作出响应:" + o);
            }
        };

        Observable observable = Observable.just("A", "B", "C");
        observable.subscribe(observer);
    }
  1. 使用Subscriber作为观察者
@Test
    public void t2() {
          
   
        //将传入的数组 / Iterable 拆分成具体对象后,依次发送出来
        String[] words = {
          
   "A", "B", "C"};
        Observable observable = Observable.from(words);
        //Subscriber类 = RxJava 内置的一个实现了 Observer 的抽象类,对 Observer 接口进行了扩展
        Subscriber subscriber = new Subscriber() {
          
   
            @Override
            public void onCompleted() {
          
   
                System.out.println("当被观察者生产Complete事件,调用该方法");
            }

            @Override
            public void onError(Throwable throwable) {
          
   
                System.out.println("对Error事件作出响应");
            }

            @Override
            public void onNext(Object o) {
          
   
                System.out.println("对Next事件作出响应:" + o);
            }
        };
        observable.subscribe(subscriber);
    }
  1. 自定义observable
public void t3() throws Exception {
          
   

        final String[] datas = new String[]{
          
   "事件1"};

        // 命令执行完的回调操作 终止命令清理
        //会在Observable结束前触发回调该call方法,无论是正常还是异常终止
        final Action0 onCompleted = new Action0() {
          
   
            @Override
            public void call() {
          
   
                System.out.println("被观察者要结束了");
            }
        };

        //被观察者
        Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {
          
   
            @Override
            public Observable<String> call() {
          
   
                Observable observable1 = Observable.from(datas);
                return observable1.doOnCompleted(onCompleted);
            }
        });
//        Observable<String> observable = Observable.just("事件1","事件2","结束");

        //观察者
        Observer observer = new Observer() {
          
   
            @Override
            public void onCompleted() {
          
   
                System.out.println("对Complete事件做出响应");
            }

            @Override
            public void onError(Throwable throwable) {
          
   
                System.out.println("对Error事件作出响应");
            }

            @Override
            public void onNext(Object o) {
          
   
                System.out.println("对Next事件作出响应:" + o);
            }
        };
        observable.subscribe(observer); //建立订阅关系

//        String s = observable.toBlocking().toFuture().get();//异步等待结果
//        System.out.println(s);
    }
经验分享 程序员 微信小程序 职场和发展