最近这三四个项目中都用到了RxJava,使用频率之高,觉着有必要进行整理,方便自己巩固记忆,也便于他人学习查找;
本文就RxJava3的创建操作符进行记录,整理如下图:
RxJava 使用步骤 :
数据源产生数据并发射给订阅了这个数据的观察者(响应式编程)。
所以主要分为三步:
第一步:创建被观察者(数据源)并生产数据
第二步:创建观察者
第三步:订阅(关系绑定)
1、create
点击一个按钮时,建立订阅关系
输出如下:
2、just
点击一个按钮时,建立订阅关系
输出如下:
3、formArray
点击一个按钮时,建立订阅关系
输出如下:
4、formIterable
点击一个按钮时,建立订阅关系
输出如下:
5、defer
举了这么几个简单的例子,我把剩下的代码都复制在下面吧:
public class MainActivity extends AppCompatActivity {
private List<Integer> list = new ArrayList<>();
@Override
protected 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>() {
@Override
public void onSubscribe(Disposable d) {
Log.d("MainActivity", "订阅时被调用");
}
@Override
public void onNext(Integer o) {
Log.d("MainActivity", "发送数据时被多次调用" + String.valueOf(o));
}
@Override
public void onError(Throwable e) {
Log.d("MainActivity", "出错时被调用" + e.toString());
}
@Override
public 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!");
// }
// };
}
后续,我再整理别的操作符;今天就这样;