RxJava2.0的使用:操作符(一)

1、创建被观察者以及发射一个Integer事件

     //创建被观察者
        Observable.create(
                //创建发射器<要发射事件的类型>
                new ObservableOnSubscribe<Integer>() {
                    @Override
                    public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {

                        //发射事件
                        emitter.onNext(1);
                        emitter.onNext(2);
                        emitter.onNext(3);

                        //发射完成事件
                        emitter.onComplete();


                    }
                }
        )
        //订阅,使被观察者和观察者建立联系
        .subscribe(

                //创建观察者
                new Observer<Integer>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        System.out.println("开始订阅");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("接受事件"+integer);

                    }

                    @Override
                    public void onError(Throwable e) {
                        System.out.println("响应Error事件"+e);

                    }

                    @Override
                    public void onComplete() {
                        System.out.println("响应Complete事件");

                    }
                }

        );
运行结果:


2、快速发送传入的事件

①发送基本数据类型(Integer,Double,String等)

       //快速创建,直接发送传入的事件
        Observable
                //最多只能传送10个参数
                .just("数据1","数据2","数据3","数据4","数据5","数据6","数据7","数据8","数据9","数据10")
                //订阅
                .subscribe(
                        //创建观察者
                        new Observer<String>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(String s) {
                                System.out.println("接收到的事件:"+s);

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        }
                );

运行结果:



② 快速发送数组:

        List<Boolean> lists=new ArrayList<>();
        lists.add(true);
        lists.add(true);
        lists.add(true);
        lists.add(false);
        lists.add(false);

        Observable.fromArray(lists)
              .subscribe(
                      new Observer<List<Boolean>>() {
                          @Override
                          public void onSubscribe(Disposable d) {

                          }

                          @Override
                          public void onNext(List<Boolean> booleen) {
                              System.out.println("接收到的事件:"+booleen);

                          }

                          @Override
                          public void onError(Throwable e) {

                          }

                          @Override
                          public void onComplete() {

                          }
                      }
              );

运行结果:



③传入数据,并且遍历出每个数据

     List<Integer> lists=new ArrayList<>();
        lists.add(0);
        lists.add(2);
        lists.add(3);
        lists.add(4);
        lists.add(5);
        Observable.fromIterable(lists)
                .subscribe(
                        new Observer<Integer>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Integer integer) {
                                System.out.println("遍历到的每一个数据:"+integer);

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        }
                );

运行结果:


3、延迟创建:

应用场景:

1)、定时:经过多少时间以后,去做什么操作

2)、周期性:每隔多长的时间,需要自动执行什么操作

①、defer:(延迟)

作用:直到观察者订阅的时候,才会创建被观察者并且发送事件(举个我项目中的应用场景:我需要上传好多的图片,当时上传图片之前我要把图片进行压缩,

只用当图片全部压缩完成以后才去做上传操作,这时就可以使用defer)

     //实现的效果是:当count=5的时候,观察者才订阅,这时被观察者会给观察者发送数据:100

        int count=0;

        //通过 defer 定义被观测者对象,注意这时被观测者是还没被创建的
        final Observable<Integer> observable=Observable.defer(new Callable<ObservableSource<? extends Integer>>() {
            @Override
            public ObservableSource<? extends Integer> call() throws Exception {

                return Observable.just(100);
            }
        });


        for (int i = 0; i <= 10; i++) {
            count++;
            System.out.println("当前的数据是"+count);

            if (count==5){

                //这时观察者开始订阅,这时才会创建被观测者对象
               observable.subscribe(
                       new Observer<Integer>() {
                           @Override
                           public void onSubscribe(Disposable d) {

                           }

                           @Override
                           public void onNext(Integer integer) {
                               System.out.println("接收到的数据:"+integer);

                           }

                           @Override
                           public void onError(Throwable e) {

                           }

                           @Override
                           public void onComplete() {

                           }
                       }
               );
            }
运行结果:


②、Timer:作用就是延迟多长时间以后,去做某一操作(应用场景:一般用于检测)

       //作用就是延迟多长时间以后发送一个数值:0(只会执行一次)
        Observable.timer(1, TimeUnit.MINUTES)//延迟一分钟
                .subscribe(new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        System.out.println("接收到的数据"+aLong);

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });
运行结果:


③interval:(轮询)

作用:每隔多长时间发送一个事件(应用场景:比如NBA文字直播,设置间隔多长时间刷新数据)

发送的事件序列=从0开始,无限递增1的正数序列

         //参数说明
            //参数1:第一次延迟的时间
            //参数2:间隔的时间
            //参数3:时间单位
        Observable.interval(5,2,TimeUnit.SECONDS)
                .subscribe(
                        new Observer<Long>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Long aLong) {
                                System.out.println("接收到的数据:"+aLong);

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        }
                );

运行结果:



④intervalRange():有限次的轮询

      //参数代表的意义:
            //参数1:事件序列的起点
            //参数2:事件的数量
            //参数3:第一次事件的延迟发送时间
            //参数3:时间间隔
            //参数4:时间单位
        Observable.intervalRange(5,10,3,2,TimeUnit.SECONDS)
                .subscribe(
                        new Observer<Long>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Long aLong) {
                                System.out.println("接收到的事件:"+aLong);

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        }
                );
运行结果:



⑤range:范围

        //参数的意义:
            //参数1:时间序列的起点
            //参数2:事件数量
        Observable.range(5,10)
                .subscribe(
                        new Observer<Integer>() {
                            @Override
                            public void onSubscribe(Disposable d) {

                            }

                            @Override
                            public void onNext(Integer integer) {
                                System.out.println("接收到的事件:"+integer);

                            }

                            @Override
                            public void onError(Throwable e) {

                            }

                            @Override
                            public void onComplete() {

                            }
                        }
                );
运行结果:


⑥rangeLong() 类似range()


4、案例:网络请求轮询

private void doNetForData() {
        Observable
                //延迟2秒发起请求,然后每个5秒无限轮询请求
                .interval(2,5,TimeUnit.SECONDS)

                //每隔5秒产生一个数字前,就发送一次网络请求,从而实现轮询效果
                .doOnNext(
                        //Consumer是简易版的Observer
                        new Consumer<Long>() {
                            @Override
                            public void accept(@NonNull Long aLong) throws Exception {
                                System.out.println("现在是第:"+aLong+"次轮询");
                                RetrofitFactory.getRetrofit().create(NetApi.class)//发情网络请求
                                        .requestData()
                                        //在IO线程进行网络请求
                                        .subscribeOn(Schedulers.io())
                                        //切换到主线程获取网络请求结果
                                        .observeOn(AndroidSchedulers.mainThread())
                                        //订阅
                                        .subscribe(
                                                //创建观察者
                                                new Observer<WordEntity>() {
                                                    @Override
                                                    public void onSubscribe(Disposable d) {

                                                    }

                                                    @Override
                                                    public void onNext(WordEntity wordEntity) {
                                                        System.out.println("请求到数据结果");

                                                    }

                                                    @Override
                                                    public void onError(Throwable e) {
                                                        System.out.println("请求数据出错"+e);

                                                    }

                                                    @Override
                                                    public void onComplete() {

                                                    }
                                                }
                                        );
                            }
                        }
                ).subscribe(
                new Observer<Long>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(Long aLong) {
                        System.out.println("interval发送的事件"+aLong);

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                }
        );

    }
运行结果:







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值