Android RxJava使用方式及说明.

来源:互联网 发布:centos 软件选择 编辑:程序博客网 时间:2024/05/17 03:57
什么是ReactiveX?
    ReactiveX是一个API,它主要关注的是异步的组成和操作可以观察到的数据流或者事件通过使用观察者模式,迭代器模式,函数式编程的特点。处理实时数据是一种常见的发生和拥有一个高效、清洁、可扩展的方法来处理这些场景是很重要的。ReactiveX提供了一个可组合和灵活的API来创建和数据流动作,同时简化异步编程的正常问题线程创建和并发问题。
RxJava的简介:

    RxJava是开源中实现的ReactiveX在Java。两个主要的类是观察者类和订阅类。在RxJava中,观察者是一个类,它发出一连串的数据或事件,这个观察者标准的流程是可以发出一个或者多个并且成功完成或者伴随着错误,一旦一个观察者完成某个项目,它将调用Subscriber.onCompleted()方法或者错误的话,那么观察者就会调用Subscriber.onError()方法,现在我们知道关于观察者和订阅者这2个类足够多了,我们将创建一个订阅者在观察者上面.

Observable integerObservable = Observable.create(new Observable.OnSubscribe() {   @Override   public void call(Subscriber subscriber) {       subscriber.onNext(1);       subscriber.onNext(2);       subscriber.onNext(3);       subscriber.onCompleted();   }});

    这个观察者发出的信号:1,2,3并且调用了完成.现在我们需要去创建一个订阅者去响应这些信号.

Subscriber integerSubscriber = new Subscriber() {   @Override   public void onCompleted() {       System.out.println("Complete!");   }   @Override   public void onError(Throwable e) {   }   @Override   public void onNext(Integer value) {       System.out.println("onNext: " + value);   }};

    我们可以看见订阅者仅仅是打印输出了一些简单的数据,一旦你有观察者和一个订阅者的时候,你需要调用Observable.subscribe(),将它们关联起来.

integerObservable.subscribe(integerSubscriber);// Outputs:// onNext: 1// onNext: 2// onNext: 3// Complete!

操作者
    创建一个订阅者去关联一个简单观察者是非常简单的,并且我们看见也非常好用,但是RxJava仅仅是一个可能,任何的观察者都可以输出改变这个调用和操作.

Observable.just(1, 2, 3, 4, 5, 6) // add more numbers       .filter(new Func1() {           @Override           public Boolean call(Integer value) {               return value % 2 == 1;           }       })       .subscribe(new Subscriber() {           @Override           public void onCompleted() {               System.out.println("Complete!");           }           @Override           public void onError(Throwable e) {           }           @Override           public void onNext(Integer value) {               System.out.println("onNext: " + value);           }       });// Outputs:// onNext: 1// onNext: 3// onNext: 5// Complete!

    下面是一个完整的使用方式:

Subscription subscription = Single.create(new Single.OnSubscribe() {           @Override           public void call(SingleSubscriber singleSubscriber) {               String value = longRunningOperation();               singleSubscriber.onSuccess(value);           }       })       .subscribeOn(Schedulers.io())       .observeOn(AndroidSchedulers.mainThread())       .subscribe(new Action1() {           @Override           public void call(String value) {               // onSuccess               Snackbar.make(rootView, value, Snackbar.LENGTH_LONG).show();           }       }, new Action1() {           @Override           public void call(Throwable throwable) {               // handle onError           }       });


0 0