RxJava操作符的使用

1.Create:

 private void create(){
        //create  创建Observable
        //Observable 被观察者
        //Subscribers观察者

        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                Log.i(TAG,"call.....");
                if(!subscriber.isUnsubscribed()) {
                    subscriber.onNext("我被执行了1");
                    subscriber.onNext("我被执行了2");
                    subscriber.onNext("我被执行了3");
                    subscriber.onNext("我被执行了4");
                    subscriber.onNext("我被执行了5");
                    subscriber.onNext("我被执行了6");

                    subscriber.onCompleted();
                }
            }
        });

        //完成订阅
        observable.subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                Log.i(TAG,"onCompleted") ;
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG,"onError:"+e.getMessage());
            }

            @Override
            public void onNext(String s) {
                Log.i(TAG,"onNext:"+s);
            }
        }) ;

    }

2.from:

private void from(){
        //from 也可以创建Observable
        Integer[] arr = {0,1,2,3,4};
        //完成创建Observable
        Observable<Integer> from = Observable.from(arr);
        //完成订阅
        from.subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                Log.i(TAG,"onCompleted") ;
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG,"onError:"+e.getMessage());
            }

            @Override
            public void onNext(Integer s) {
                Log.i(TAG,"onNext:"+s);
            }
        }) ;
    }

3.just:

 private void just(){
        //just  也可以创建Observable  参数是可变参数
        Observable.just(0, 1, 2, 3, 4, 5)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        Log.i(TAG,"call:"+integer);
                    }
                }) ;

    }

4.map:

private void map(){
        //map 变换,在该实例中,将Integer转换成String
        //在实际开发中,需要通过String类型的url获取到图片

        String[] urls = {};
        Observable.from(urls)
                .map(new Func1<String, Bitmap>() {
                    @Override
                    public Bitmap call(String s) {
                        //s 代表图片url,网络请求通过url 获取到图片
                        return null;
                    }
                }).subscribe(new Action1<Bitmap>() {
            @Override
            public void call(Bitmap bitmap) {
                //iv.setBackage()
            }
        });

        /*Observable.just(0,1,2,3)
                .map(new Func1<Integer, String>() {
                    @Override
                    public String call(Integer integer) {
                        return integer+"转换了";
                    }
                }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG,"call:"+s);//0转换了  1转换了。。。
            }
        });*/
    }

5.flatmap:

private void flatmap(){
        //flatmap 转换  将多个Observable转换成一个Observalbe然后发送
        //获取城市的天气

        /**
         *
         * map 是将一种类型转换成另一种类型(可以是任意类型)
         *
         * flatmap 是将一种类转换成Observable(泛型可以是任意的)
         *
         */

        String[] citys = {"北京","上海","杭州"};
        Observable.from(citys)
                .flatMap(new Func1<String, Observable<WeathData>>() {
                    @Override
                    public Observable<WeathData> call(String s) {
                        return getCityWeathData(s);
                    }
                }).subscribe(new Action1<WeathData>() {
            @Override
            public void call(WeathData weathData) {
                Log.i(TAG,weathData.city+weathData.state);
            }
        });
    }

6.zip:

private void zip(){
        //zip  将两个Observable按照规则严格的合成一个Observable
        Observable<Integer> observable1 = Observable.just(10, 20, 30,40);
        Observable<Integer> observable2 = Observable.just(1, 2, 3,4);

        Observable.zip(observable1, observable2, new Func2<Integer, Integer, String>() {
            @Override
            public String call(Integer integer, Integer integer2) {
                //定义合并规则
                return integer + integer2 + "abc";
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String string) {
                Log.i(TAG,"call:"+string) ;
            }
        });

    }

7.zipwith:

 private void zipwith(){
        //zipwith 将本身与其他的Observable按照规则严格的合并成一个Observable
        Observable.just(10,20,30,40)
                .zipWith(Observable.just("a", "b", "c"), new Func2<Integer, String, String>() {
                    @Override
                    public String call(Integer integer, String s) {
                        //合并规则
                        return integer + s ;
                    }
                }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.i(TAG,"call:"+s) ;
            }
        });
    }

8.retry:

private void retry(){
        //retry 在出错的时候重试(异常的时候重新执行)
        //用处:网络连接异常的时候
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                try {
                    for (int i = 0; i < 5; i++) {
                        if (i == 3) {
                            throw new Exception("出错了");
                        }
                        subscriber.onNext(i);
                    }
                    subscriber.onCompleted();
                }catch (Exception e){
                    subscriber.onError(e);
                }
            }
        }).retry(2).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                Log.i(TAG,"onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG,"onError:"+e.getMessage()) ;
            }

            @Override
            public void onNext(Integer integer) {
                Log.i(TAG,"onNext:"+integer) ;
            }
        });
    }

9.retrywhen:

 private void retrywhen(){
        //retrywhen 异常的时候执行
        //网络请求框架中,一般使用retryWhen  要执行操作是连接网络,连接出异常的时候,
        // 1、我们可以直接重复执行连接网络,retry
        // 2、同时我们也可以判断连接异常的类型,再做决定是否重连 retyrWhen
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                Log.i(TAG,"总出错");
                subscriber.onError(new Throwable("出错了"));
            }
        }).retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
            @Override
            public Observable<?> call(Observable<? extends Throwable> observable) {
                return observable.zipWith(Observable.range(1, 3), new Func2<Throwable, Integer, Integer>() {
                    @Override
                    public Integer call(Throwable throwable, Integer integer) {
                        return integer;
                    }
                }).flatMap(new Func1<Integer, Observable<?>>() {
                    @Override
                    public Observable<?> call(Integer integer) {
                        //timer 延迟执行的操作符
                        Log.i(TAG,"延迟"+integer+"秒");
                        return Observable.timer(integer, TimeUnit.SECONDS);
                    }
                });
            }
        }).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                Log.i(TAG,"onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.i(TAG,"onError:"+e.getMessage()) ;
            }

            @Override
            public void onNext(Integer integer) {
                Log.i(TAG,"onNext:"+integer) ;
            }
        }) ;
    }

10.filter:

private void filter(){
        //filter 按照规则过滤
        Observable.just(0,1,2,3,4,5)
                .filter(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer < 2;
                    }
                }).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.i(TAG,"call:"+integer) ;
            }
        });
    }

详情可见:链接:https://pan.baidu.com/s/1omIDec_QK-nnCfwamBJV3A 密码:1i25

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值