RxJava

RxJava

  • Rx-X
  • RxJava

作用

  1. 实现观察者设计模式
  2. 线程调度,类似EventBus
  3. 链式数据处理,类似Jdk8的Stream操作

观察者设计模式

  • 概念:
  • Java Api对观察者设计模式的支持

步骤

  1. 定义被观察者(Obserable)->发消息的人
  2. 定义观察者(Observer/Subscriber)–>收消息
  3. 发生关系–>订阅的动作Subscribe

例子

//1.定义被观察者
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {

        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("我是发送的消息");
        }
    });

    //2.定义观察者
    Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            System.out.println("onError");

        }

        @Override
        public void onNext(String s) {
            System.out.println("onNext");

        }
    };
    //3.发生关系
    observable.subscribe(observer);

onCompleted,onError,onNext几个方法的说明

onCompleted()方法是方法完成时的回调
onError()失败的回调
onNext()成功的回调

创建被观察者(发送消息的对象)的其他形式

1.使用create( ),最基本的创建方式:
normalObservable = Observable.create(new Observable.OnSubscribe<String>() {
  @Override
  public void call(Subscriber<? super String> subscriber) {
      subscriber.onNext("create1"); //发射一个"create1"的String
      subscriber.onNext("create2"); //发射一个"create2"的String
      subscriber.onCompleted();//发射完成,这种方法需要手动调用onCompleted,才会回调Observer的onCompleted方法
  }});

2.使用just( ),将为你创建一个Observable并自动为你调用onNext( )发射数据:
justObservable = Observable.just("just1","just2");//依次发送"just1"和"just2"

3.使用from( ),遍历集合,发送每个item:
List<String> list = new ArrayList<>();
list.add("from1");
list.add("from2");
list.add("from3");
fromObservable = Observable.from(list);  //遍历list 每次发送一个
/** 注意,just()方法也可以传list,但是发送的是整个list对象,而from()发送的是list的一个item** /

4.使用defer( ),有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable:
deferObservable = Observable.defer(new Func0<Observable<String>>() {
  @Override
  //注意此处的call方法没有Subscriber参数
  public Observable<String> call() {
      return Observable.just("deferObservable");
  }});

5.使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器:
intervalObservable = Observable.interval(1, TimeUnit.SECONDS);//每隔一秒发送一次

6.使用range( ),创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异常:
rangeObservable = Observable.range(10, 5);//将发送整数10,11,12,13,14

7.使用timer( ),创建一个Observable,它在一个给定的延迟后发射一个特殊的值,等同于Android中Handler的postDelay( )方法:
timeObservable = Observable.timer(3, TimeUnit.SECONDS);  //3秒后发射一个值

8.使用repeat( ),创建一个重复发射特定数据的Observable:
repeatObservable = Observable.just("repeatObservable").repeat(3);//重复发射3次

创建观察者的多种形式

常见的基本的6种形式

private void way6() {
    Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("发送消息");
        }
    }).subscribe(new Action1<String>() {
        @Override
        public void call(String s) {
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
        }
    });
}

private void way5() {
    Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("发送消息");
        }
    }).subscribe(new Subscriber<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(String s) {
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
        }
    });
}

private void way4() {
    List<String> list = Arrays.asList("a", "b", "c", "d");
    //1.定义被观察者
    Observable<String> observable = Observable.from(list);
    //2.定义观察者
    Subscriber<String> subscriber = new Subscriber<String>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            System.out.println("onError");
        }

        @Override
        public void onNext(String s) {
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
        }
    };
    //3.订阅
    observable.subscribe(subscriber);
}

private void way3() {
    List<String> list = Arrays.asList("a", "b", "c", "d");
    //1.定义被观察者
    Observable<List<String>> observable = Observable.just(list);
    //2.定义观察者
    Subscriber<List<String>> subscriber = new Subscriber<List<String>>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            System.out.println("onError");
        }

        @Override
        public void onNext(List<String> strings) {
            Toast.makeText(getApplicationContext(), "strings.size:" + strings.size(), Toast.LENGTH_SHORT).show();
        }
    };
    //3.订阅
    observable.subscribe(subscriber);
}

private void way2() {
    //1.定义被观察者
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {

        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("我是发送的消息");
        }
    });
    //2.定义观察者
    Subscriber<String> subscriber = new Subscriber<String>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            System.out.println("onError");
        }

        @Override
        public void onNext(String s) {
            Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
        }
    };
    //3.订阅
    observable.subscribe(subscriber);
}

private void way1() {
    //1.定义被观察者
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {

        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("我是发送的消息");
        }
    });
    //2.定义观察者
    Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {
            System.out.println("onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            System.out.println("onError");

        }

        @Override
        public void onNext(String s) {
            System.out.println("onNext");

        }
    };
    //3.发生关系
    observable.subscribe(observer);
}

线程调度

  • 用到Andorid相关的调度器需要用到RxAndroid,io.reactivex:rxandroid:1.2.1
  • Schedulers.io()
  • AndroidSchedulers.mainThread()

操作符

类似Jdk8的Stream

RxJava 2.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值