RxJava
介绍和基本使用
介绍
RxJava
是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。
基本使用
- 引入依赖
<dependency>
<groupId>io.reactivex</groupId>
<artifactId>rxjava</artifactId>
<version>1.2.0</version>
</dependency>
- 定义观察者和被观察者
@Test
public void t1() {
Observer observer = new Observer() {
@Override
public void onCompleted() {
System.out.println("当被观察者生产Complete事件,调用该方法");
}
@Override
public void onError(Throwable throwable) {
System.out.println("对Error事件作出响应");
}
@Override
public void onNext(Object o) {
System.out.println("对Next事件作出响应:" + o);
}
};
Observable observable = Observable.just("A", "B", "C");
observable.subscribe(observer);
}
- 使用Subscriber作为观察者
@Test
public void t2() {
//将传入的数组 / Iterable 拆分成具体对象后,依次发送出来
String[] words = {"A", "B", "C"};
Observable observable = Observable.from(words);
//Subscriber类 = RxJava 内置的一个实现了 Observer 的抽象类,对 Observer 接口进行了扩展
Subscriber subscriber = new Subscriber() {
@Override
public void onCompleted() {
System.out.println("当被观察者生产Complete事件,调用该方法");
}
@Override
public void onError(Throwable throwable) {
System.out.println("对Error事件作出响应");
}
@Override
public void onNext(Object o) {
System.out.println("对Next事件作出响应:" + o);
}
};
observable.subscribe(subscriber);
}
- 自定义observable
public void t3() throws Exception {
final String[] datas = new String[]{"事件1"};
// 命令执行完的回调操作 终止命令清理
//会在Observable结束前触发回调该call方法,无论是正常还是异常终止
final Action0 onCompleted = new Action0() {
@Override
public void call() {
System.out.println("被观察者要结束了");
}
};
//被观察者
Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {
@Override
public Observable<String> call() {
Observable observable1 = Observable.from(datas);
return observable1.doOnCompleted(onCompleted);
}
});
// Observable<String> observable = Observable.just("事件1","事件2","结束");
//观察者
Observer observer = new Observer() {
@Override
public void onCompleted() {
System.out.println("对Complete事件做出响应");
}
@Override
public void onError(Throwable throwable) {
System.out.println("对Error事件作出响应");
}
@Override
public void onNext(Object o) {
System.out.println("对Next事件作出响应:" + o);
}
};
observable.subscribe(observer); //建立订阅关系
// String s = observable.toBlocking().toFuture().get();//异步等待结果
// System.out.println(s);
}