相关文章
- 观察者模式实例讲解
- 使用java中的类(Observable与Observer)实现观察者模式
- Rx_java2中的线程控制
- Rx_java2操作符介绍1(Map、Flatmap)
- Rx_java2操作符介绍2(debounce 、filter 、switchMap )
- Rx_java2操作符介绍3(throttleFirst、debounce )
- Retrofit结合RxJava2使用
写在前面
经过前面俩节对观察者模式的学习,为学习Rx_java奠定了基础,本篇开始,正式开始学习Rx_java2。你也可以通过文旦去全面的学习Rxjava,Rxjava中文文档下载
RX_java中的几个概念:
- Observable:被观察者
- Observer/Subscriber:观察者
- Subscribe:订阅
Observable和Observer通过subscribe()方法实现订阅关系
Rx_java的几种书写方式
1. 使用create方式
其中onNext()方法相当于数据发生了变化调用的方法
onError()方法是发生错误调用的方法
onComplete()是数据变化完成后调用的方法 ,需要注意的是。onError和onComplete方法是互斥的。
onSubscribe(Disposable d)方法,在代码注释中详细进行了介绍。
public static void createObservable(){
// 创建被观察者,
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("hello");
e.onNext("rxjava");
e.onNext(getJsonDataFromNet());
e.onNext("world");
e.onComplete();
}
});
// 创建观察者
Observer<String> observer = new Observer<String>(){
@Override
public void onSubscribe(@NonNull Disposable d) {
// d.isDisposed(); // 判断观察者与备观察者是否发生了订阅关系
// d.dispose(); // 解除观察者与被观察者的订阅关系
}
@Override
public void onNext(@NonNull String s) {
Log.i(TAG,s);
}
@Override
public void onError(@NonNull Throwable e) {
Log.i(TAG,e.getMessage());
}
@Override
public void onComplete() {
Log.i(TAG,"complete");
}
};
// 绑定观察者与被观察者
observable.subscribe(observer);
}
运行结果为》:
2.Observer(观察者的另一种创建方式)
有时候,我们不需要使用Oberver中的所有方法(onNext、onError、onComplete、onSubcriber),只需要重写自己需要的即可,那么我们需要按如下方法去创建Oberver
Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("hello");
e.onNext("rxjava");
e.onNext(getJsonDataFromNet());
e.onNext("world");
e.onComplete();
}
});
observable.subscribe( new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// 表示onNext()方法
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// 表示onError方法
}
}, new Action() {
@Override
public void run() throws Exception {
// 表示onComplete()方法
}
}, new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
// 表示onSubscribe()方法
}
});
其中,第一个Consumer参数,表示onNext()方法,第二个Consumer参数表示onError()方法,第三个参数为Action表示onComplete()方法,第四个参数Consumer表示onSubscribe()方法。可以根据需要去写创建参数。
3.通过just方式创建Observable
just方式可以添加多个参数,然后按顺序发送输出
// 创建被观察者
Observable<String> observable = Observable.just("hello", "rxjava", getJsonDataFromNet(), "world");
// 订阅
observable.subscribe( new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
// 表示onNext()方法
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// 表示onError方法
}
}, new Action() {
@Override
public void run() throws Exception {
// 表示onComplete()方法
}
}, new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
// 表示onSubscribe()方法
}
});
4.from方式创建Observable
fromArray方式创建
fromArray创建跟just方式创建是一样的,看just源码,其实就是调用的fromArray方法
// fromArray方式创建Observable被观察者
Observable<String> observable = Observable.fromArray("hello", "rxjava", getJsonDataFromNet(), "world");
fromCallable方式创建Observable
fromCallable方式只能发送一个数据
Observable<String> observable = Observable.fromCallable(new Callable<String>() {
@Override
public String call() throws Exception {
return "hello";
}
});
写在后面
本篇介绍了Rxjava2的基本使用方式,下篇将介绍Rxjava2的线程控制。Rx_java2中的线程控制