RXJava
来源:互联网 发布:final java 参数 编辑:程序博客网 时间:2024/06/06 02:19
关于: https://github.com/lzyzsd/Awesome-RxJava
一、Observables和Subscribers
Observables是被观察者,发出一系列事件,操作事件,(如:网络请求,查询数据库);Subscribers是观察者,处理结果(如:显示请求后数据,显示查询结果)。
一个Observables可以发出零个或多个事件,指导事件的结束或出错;调用Subscriber的onNext()或onError()处理事件,调用onError()时结束
如果Observables没有Subscriber,则它不会发出任何事件。
二、配置
build.gradle
compile ‘io.reactivex:rxjava:1.1.5’
compile ‘io.reactivex:rxandroid:1.1.0’
三、使用
方式一:
1.创建Observable
Observable.create(),泛型为对应观察者接收的类型。call()方法为重写观察者的相应方法(传入参数)。
Observable<String> myObservable=Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext("Hello World");//Subscriber的onNext()方法会被调用 subscriber.onCompleted();//Subscriber的onCompleted()会被调用 }});
2.创建Subscriber
方法为对应实现。
Subscriber<String> subscriber=new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { System.out.println(s); } };
Observable.just()会自动向下执行Subscriber的onNext()和onComplete()或onError(),Observable.create()则需要调用Subscriber的方法。
3.观察者和被观察者关联起来
观察者执行onNext()中内容。
myObservable.subscribe(subscriber);
方式二:
Observable.just()创建Observable,.subscribe()关联观察者,参数是执行的操作。
Observable.just("方式二").subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } });
关于操作符:
是一种流操作,不是一个操作符执行完后执行下一个,当循环的时候遍历子集,执行一个子集的流操作。例如:flatmap()后,多个doOnNext(),最后subscribe(),执行的是从上到下整体再循环,不是一个操作符循环技术后执行下一个。
1.map():对一个Observable的连续操作(响应式编程),将最后的结果给Subscriber处理。
泛型
Observable.just("12").map(new Func1<String, Integer>() { @Override public Integer call(String s) { return Integer.valueOf(s)+1; } }).map(new Func1<Integer, String>() { @Override public String call(Integer integer) { return String.valueOf(integer)+"-------"; } }).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println(s); } });
2.from() 参数为集合/数组,省掉遍历的过程。
String[] item = {"1", "2"}; Observable.from(item).subscribe(new Action1<String>() { @Override public void call(String o) { System.out.println(o); } });
3.flatMap()
Observable.create(new Observable.OnSubscribe<String[]>() { @Override public void call(Subscriber<? super String[]> subscriber) { subscriber.onNext(item); } }).flatMap(new Func1<String[], Observable<String>>() { @Override public Observable<String> call(String[] strings) { return Observable.from(strings); } }).subscribe(new Action1<String>() { @Override public void call(String o) { System.out.println(o+"----"); } });
4.take()参数为int类型,表示指定最多几个结果。
5.doOnNext()对传入数据的额外操作,并不会影响数据源的值。(例如在输出前存储等)
- rxjava
- RXJava
- RXJava
- RXJava
- RxJava
- Rxjava
- RxJava
- RxJava
- Rxjava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- RxJava
- rxjava
- RxJava
- Android Https请求详细demo
- Ubuntu16.04如何把vim打造成为latex编辑器
- 【技术分享】京东电商广告和推荐的机器学习系统实践
- Qt连接mysql数据库,及出现的问题
- C#设计模式学习笔记-单例模式
- RXJava
- Linux内核驱动之热插拔事件
- 图片切换(小数量)
- Java FTP 下载文件和文件夹
- Android里回调(callback)的简单用法
- switch case语句里面不能定义对象,解决方法
- liblinear实践初步
- CSS浮动(float,clear)通俗讲解
- 训练神经网络的五大算法