android Rxjava 使用心得

来源:互联网 发布:java中匿名内部类 编辑:程序博客网 时间:2024/05/16 06:16

首先感谢这篇博客地址:http://www.jianshu.com/p/52cd2d514528
该博主里面介绍了使用规则,和一些简单的介绍,博主当时用的是1.0.4的版本比较老,到了2.0是稍微有点改变的,我看了博主的,然后自己写下这篇总结性的,我建议先看看博主的然后再来看看我的吧
首先得像自己的build.gradle添加这2个

compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
compile ‘io.reactivex.rxjava2:rxjava:2.0.1’

官网地址:https://github.com/ReactiveX/RxAndroid

很多都说RxJava就是观察者,和被观察者,2个角色,有时候容易被这2个弄混淆,不好区分他们,我们平常学习android也会用到这个观察者,和被观察者的模式比如我们最多的Button

private Button button;button.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //响应事件处理            }        });

Button —–被观察者
new View.OnClickListener()—-观察者
setOnClickListener——订阅
我们点击一个按钮Button(事件源)然后观察者感觉到了,然后就开始处理事情。

对应到RxJava上的被观察者:
Observable.create()或者是Observable.just(T…)或者是Observable.from,这3个就等于Button,他们是事件源,只不过这个事件源需要用这样的方式来创建使用

对应到RxJava上的观察者:

  //创建一个观察者        Observer<String> observer = new Observer<String>() {              @Override            public void onCompleted() {            }            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {            }        };

也就是消费事件的,处理最后的事件的

最后是订阅:
被观察者.subscribe(观察者);
是不是感觉这有问题,你就理解为他们之间这样建立了关系

map/flatMap区别:
你理解为map是一个转换工具,由A类型转换成B类型,比如下面的Student—>String,flatMap是for循环
eg:map

 Observable.just(student1, student2, student2)               //使用map进行转换,参数1:转换前的类型,参数2:转换后的类型                .map(new Func1<Student, String>() {                    @Override                    public String call(Student i) {                        String name = i.getName();//获取Student对象中的name                        return name;//返回name                    }                })                .subscribe(new Action1<String>() {                    @Override                    public void call(String s) {                        nameList.add(s);                    }                });

eg:flatMap:

    /**     * 学生类     */    class Student {        private String name;//姓名        private List<Course> coursesList;//所修的课程        ...    }    /**     * 课程类     */    class  Course {        private String name;//课程名        private String id;        ...    }

一个学生可以有很多的课程

 List<Student> students = new ArrayList<Student>();        students.add...        ...        Observable.from(students)                .flatMap(new Func1<Student, Observable<Course>>() {                    @Override                    public Observable<Course> call(Student student) {                        return Observable.from(student.getCoursesList());                    }                })                .subscribe(new Action1<Course>() {                    @Override                    public void call(Course course) {                        Log.i(TAG, course.getName());                    }                });

这里面先传入学生集合students,在Observable call(Student student)循环遍历值获取CourseList 集合,最后拿到课程名称

原创粉丝点击