4.RxJava第一个实例

前言:


还是基于考生和监考老师的例子,对RxJava中的几个概念进行理解

maven依赖

1
2
3
4
5
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.0.10</version>
</dependency>

先有一个考生Observable


1
2
3
4
5
6
7
8
 Observable<String>  student = Observable.create(new Observable.OnSubscribe<String>() {
//subscriber 订阅者对象
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("我要交卷"); //发射一个"我要交卷"的String(调用订阅者对象方法)
subscriber.onCompleted();//发射完成,必须写这个,不写发布出去
}
});

上面代码就是说创建了一个发射源,并且发出了一个字符串。这个创建发射数据源的方式有很多

再有一个监考老师Observer


1
2
3
4
5
6
7
8
9
10
11
12
13

Observer<String> teach = new Observer<String>() {
@Override
public void onCompleted() {
System.out.println("收到你的试卷了");
}
@Override
public void onError(Throwable e) { }
@Override
public void onNext(String s) {
System.out.println("收到请求"+s);
}
};

上面代码就是创建了一个接收源,重写的几个方法onCompleted(当接收完了) onError(当错误) onNext(当收到数据)

老师进入考场了开始监考subscribe


1
student.subscribe(teach);

上面这句就是接收源订阅发送源,也就是老师开始监考学生。

有个同学作弊Subject


1
2
3
4
PublishSubject<String> student2 = PublishSubject.create();
student2.map(string -> "你的答案给我了,我也要交卷了");
student.subscribe(student2);//接收student的数据
student2.subscribe(teach);//一样被teach监考

上面代码,Subject既能接收也能发送。

班主任在外边action0


1
2
3
4
5
6
7
Action1 headTeacher = new Action1() {
@Override
public void call(Object o) {
System.out.println("-------------"+o);
}
};
student.subscribe(headTeacher);

班主任等你交卷了出来有话和你说
为啥用Action1而不用Observer呢,班主任只关心你考完了,在考场里的其他动作,她没必要处理