RxJava简单介绍:
RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。这里的事件可以是任何你感兴趣的东西(触摸事件,web接口调用返回的数据等)
一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。
Rxjava的看起来很想设计模式中的观察者模式,但是有一点明显不同,那就是如果一个Observerble没有任何的的Subscriber,那么这个Observable是不会发出任何事件的。
细节参考大神博客:
https://gank.io/post/560e15be2dca930e00da1083
面试相关:
https://blog.csdn.net/u011311586/article/details/79405891
https://blog.csdn.net/u011311586/article/details/79385242
观察者模式介绍:
参考网址:https://blog.csdn.net/jason0539/article/details/45055233
导包:
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'io.reactivex.rxjava2:rxjava:2.x.y'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'//转换器,请求结果转换成Model
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'//配合Rxjava 使用
创建一个被观察者:
/**
* 创建一个被观察者observable:用户产生数据,相当于一个发送者。
* 1.使用create方法
* 2.或者直接new一个observable对象
*/
observable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("还请你兑现约定");
emitter.onNext("飞到为我破冰");
emitter.onNext("置身冰岛名胜");
emitter.onNext("杀不死依存症");
emitter.onNext("前尘埋没那段情");
emitter.onNext("约誓残念却没有清");
emitter.onNext("而你有讲过");
emitter.onNext("来年再续旧场景");
emitter.onNext("—— 雷克雅未克");
emitter.onError(null);
emitter.onComplete();
}
});
/* observable = new Observable() {
@Override
protected void subscribeActual(Observer observer) {
observer.onNext("还请你兑现约定");
observer.onNext("飞到为我破冰");
observer.onNext("置身冰岛名胜");
observer.onNext("杀不死依存症");
observer.onNext("前尘埋没那段情");
observer.onNext("约誓残念却没有清");
observer.onNext("而你有讲过");
observer.onNext("来年再续旧场景");
observer.onNext("—— 雷克雅未克");
}
};*/
创建一个观察者:
/**
* 设置一个观察者:用于从事件流里面拾取数据,相当于是一个接收者
*/
Observer<String> observer=new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
Log.i("rxJava", "接收到的消息是:" + s);
//把接收到的数据展现在textview中:
save.setText(s);
}
@Override
public void onError(Throwable e) {
Log.i("rxJava", "接收到错误" );
}
@Override
public void onComplete() {
Log.i("rxJava", "接收消息完成" );
}
};
observable.subscribe(observer);