设为首页 加入收藏

TOP

RxJava操作符的简单使用(一)
2019-09-01 23:12:52 】 浏览:70
Tags:RxJava 操作 符的 简单 使用

一、准备工作在app的build.gradle文件下的dependencies中添加依赖:

    compile 'io.reactivex:rxjava:1.3.0'
    compile 'io.reactivex:rxandroid:1.2.1'

二、RxJava的操作符用法:

1、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"); //只有完成了下面的订阅方法才能执行onNext等方法
                    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

//from 也可以创建Observable  讲int类型的数组01234转化为Observable,通过订阅的onNext可以一个个的取到数组的值
        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 i) {
                Log.i(TAG,"onNext:"+i);
            }
        }) ;

3、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

//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>() { // 获取的的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

//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);
            }
        });

此处用到的getC

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇安卓开发笔记(十一):SharedPre.. 下一篇Android Studio 受不了了

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目