经过前面俩节对观察者模式的学习,为学习Rx_java奠定了基础,本篇开始,正式开始学习Rx_java2。你也可以通过文旦去全面的学习Rxjava,Rxjava中文文档下载
Observable和Observer通过subscribe()方法实现订阅关系
其中onNext()方法相当于数据发生了变化调用的方法
onError()方法是发生错误调用的方法
onComplete()是数据变化完成后调用的方法 ,需要注意的是。onError和onComplete方法是互斥的。
onSubscribe(Disposable d)方法,在代码注释中详细进行了介绍。
public static void createObservable(){
// 创建被观察者,
Observable observable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(@NonNull ObservableEmitter e) throws Exception {
e.onNext("hello");
e.onNext("rxjava");
e.onNext(getJsonDataFromNet());
e.onNext("world");
e.onComplete();
}
});
// 创建观察者
Observer observer = new Observer(){
@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);
}
有时候,我们不需要使用Oberver中的所有方法(onNext、onError、onComplete、onSubcriber),只需要重写自己需要的即可,那么我们需要按如下方法去创建Oberver
Observable observable = Observable.create(new ObservableOnSubscribe() {
@Override
public void subscribe(@NonNull ObservableEmitter e) throws Exception {
e.onNext("hello");
e.onNext("rxjava");
e.onNext(getJsonDataFromNet());
e.onNext("world");
e.onComplete();
}
});
observable.subscribe( new Consumer() {
@Override
public void accept(String s) throws Exception {
// 表示onNext()方法
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
// 表示onError方法
}
}, new Action() {
@Override
public void run() throws Exception {
// 表示onComplete()方法
}
}, new Consumer() {
@Override
public void accept(Disposable disposable) throws Exception {
// 表示onSubscribe()方法
}
});
其中,第一个Consumer参数,表示onNext()方法,第二个Consumer参数表示onError()方法,第三个参数为Action表示onComplete()方法,第四个参数Consumer表示onSubscribe()方法。可以根据需要去写创建参数。
just方式可以添加多个参数,然后按顺序发送输出
// 创建被观察者
Observable observable = Observable.just("hello", "rxjava", getJsonDataFromNet(), "world");
// 订阅
observable.subscribe( new Consumer() {
@Override
public void accept(String s) throws Exception {
// 表示onNext()方法
}
}, new Consumer() {
@Override
public void accept(Throwable throwable) throws Exception {
// 表示onError方法
}
}, new Action() {
@Override
public void run() throws Exception {
// 表示onComplete()方法
}
}, new Consumer() {
@Override
public void accept(Disposable disposable) throws Exception {
// 表示onSubscribe()方法
}
});
fromArray创建跟just方式创建是一样的,看just源码,其实就是调用的fromArray方法
// fromArray方式创建Observable被观察者
Observable observable = Observable.fromArray("hello", "rxjava", getJsonDataFromNet(), "world");
fromCallable方式只能发送一个数据
Observable observable = Observable.fromCallable(new Callable() {
@Override
public String call() throws Exception {
return "hello";
}
});
本篇介绍了Rxjava2的基本使用方式,下篇将介绍Rxjava2的线程控制。Rx_java2中的线程控制