最近这三四个项目中都用到了RxJava,使用频率之高,觉着有必要进行整理,方便自己巩固记忆,也便于他人学习查找;
本文就RxJava3的创建操作符进行记录,整理如下图:
RxJava 使用步骤 :
数据源产生数据并发射给订阅了这个数据的观察者(响应式编程)。
所以主要分为三步:
第一步:创建被观察者(数据源)并生产数据
第二步:创建观察者
第三步:订阅(关系绑定)
1、create
点击一个按钮时,建立订阅关系
输出如下:
2、just
点击一个按钮时,建立订阅关系
输出如下:
3、formArray
点击一个按钮时,建立订阅关系
输出如下:
4、formIterable
点击一个按钮时,建立订阅关系
输出如下:
5、defer
举了这么几个简单的例子,我把剩下的代码都复制在下面吧:
public class MainActivity extends AppCompatActivity {private List<Integer> list = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);list.add(8);list.add(9);list.add(10);list.add(11);}public void testOnClick(View view) {//3、订阅,此时触发1步中subscribe方法的执行observableByFromWithLambda.subscribe(observer);}//创建操作符 range,rangeLong//连续发送一个序列,可指定范围//序列可为Long类型
// Observable<Long> observableByFromWithLambda = Observable.rangeLong(1,20);/*** start: 开始数值* count: 输出值的个数* initialDelay: 延迟多少秒执行* period: 间隔多久执行一次* TimeUnit: 单位设置,NANOSECONDS(纳秒),MICROSECONDS(微秒),MILLISECONDS(毫秒),SECONDS(秒),MINUTES(分钟),HOURS(小时),DAYS(天)*///创建操作符intervalRange,每隔指定时间发送指定数量// Observable<Long> observableByFromWithLambda = Observable.intervalRange(0,12,2,2,TimeUnit.SECONDS);//创建操作符interval,每隔指定时间发送
// Observable<Long> observableByFromWithLambda = Observable.interval(3,TimeUnit.SECONDS);//创建操作符timer,延迟指定时间后发送
// Observable<Long> observableByFromWithLambda = Observable.timer(3, TimeUnit.SECONDS);//创建操作符 defer,直到被订阅后才发送Observable<Integer> observableByFromWithLambda = Observable.defer(() -> Observable.just(5));//创建操作符 error ,仅发送Error事件
// Observable<Integer> observableByFromWithLambda = Observable.error(new Throwable());//创建操作符 empty,仅发送仅发送Complete事件
// Observable<Integer> observableByFromWithLambda = Observable.empty();//创建操作符 never,不发送任何事件
// Observable<Integer> observableByFromWithLambda = Observable.never();//1、创建操作符fromIterable,发送传入的list数据
// Observable<Integer> observableByFromWithLambda = Observable.fromIterable(list);//1、创建操作符formArray(),发送传入的数组数据
// Integer[] items = {0, 1, 2, 3, 4};
// Observable<Integer> observableByFromWithLambda = Observable.fromArray(items);//1、创建操作符 just()使用(直接发送传入的值)
// Observable<Integer> observableByFromWithLambda = Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);//1、创建被观察者(create使用, 最基本的创建方式)
// Observable<Integer> observableByFromWithLambda = Observable.create((emitter -> {
// emitter.onNext(1);
// emitter.onNext(2);
// emitter.onNext(3);
// emitter.onNext(4);
// emitter.onComplete();
// }));//2.创建观察者/订阅者Observer<Integer> observer = new Observer<Integer>() {@Overridepublic void onSubscribe(Disposable d) {Log.d("MainActivity", "订阅时被调用");}@Overridepublic void onNext(Integer o) {Log.d("MainActivity", "发送数据时被多次调用" + String.valueOf(o));}@Overridepublic void onError(Throwable e) {Log.d("MainActivity", "出错时被调用" + e.toString());}@Overridepublic void onComplete() {Log.d("MainActivity", "完成时被调用");}};// Observer<Long> observer = new Observer<Long>() {
//
//
// @Override
// public void onSubscribe(@NonNull Disposable d) {
// Log.d("MainActivity", "onSubscribe(Disposable d) called!");
// }
//
// @Override
// public void onNext(@NonNull Long aLong) {
// Log.d("MainActivity", "nNext(Integer o) called!" + aLong);
// }
//
// @Override
// public void onError(@NonNull Throwable e) {
// Log.d("MainActivity", "onError(Throwable e) called!" + e.toString());
// }
//
// @Override
// public void onComplete() {
// Log.d("MainActivity", "onComplete called!");
// }
// };}
后续,我再整理别的操作符;今天就这样;