看别人的RxJava 虽然能懂,但是觉得,没必要的描述了大笔篇幅。
自己整理一些具象场景帮助自己理解Rxjava这个比较抽象的框架。
只是为了开发理解上方便,做个小计,逻辑等方面不符合什么的,请勿喷!!!你可以右上角点击关闭,谢谢!!!
Observables(被观察者,事件源) 具象 :小偷
Subscribers(观察者) 具象 :警察
Subscriber的onNext方法 具象 :警察在被盗地点进行调查
Subscriber.onError() 具象 :警察在被盗地点进行调查,但是这次是谎报
/***********************************************
******************* 第 一 幕********************
**************************************************/
//小偷
Observable<String> myObservable = Observable.create(
//小偷留下偷盗痕迹
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
//小偷留下 “一句话线索”
sub.onNext("今夜,小爷来此一盗!");
sub.onCompleted();
}
}
);
//警察
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
//警察接警后,来到现场看到了,小偷留下 “一句话线索”
System.out.println(s);
}
@Override
public void onCompleted() { }
@Override
public void onError(Throwable e) { }
};
//有人报警
myObservable.subscribe(mySubscriber);
//上边简单的写法
//小偷 盗窃
Observable<String> myObservable = Observable.just("今夜,小爷来此一盗!");
//警察反应
Action1<String> onNextAction = new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
};
//警察接警
myObservable.subscribe(onNextAction);
//最简洁写法
Observable.just("Hello, world!")
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
//使用java8的lambda可以使代码更简洁
Observable.just("Hello, world!").subscribe(s -> System.out.println(s));
/***********************************************
******************* 第 二 幕 ********************
**************************************************/
操作符(Operators)
//小偷聪明了,犯案后,可以对盗窃痕迹进行二次处理,然后,警察来到现场,看到了加密后的犯案线索
Observable.just("今夜,小爷来此一盗!")
.map(new Func1<String, String>() {
@Override
public String call(String s) {
return "-----清理掉线索----";
}
})
.subscribe(s -> System.out.println(s));
//注明下,这里的Func1的第一个String代表传入参数类型,即小偷的痕迹,第二个String代表要加密后线索的类型
使用lambda可以简化为
Observable.just("今夜,小爷来此一盗!")
.map(s -> "-----清理掉线索----")
.subscribe(s -> System.out.println(s));
map操作符进阶
//小偷更加高明了,加密输出的线索,不再是单向输出,可以任意输出类型,警察头更大了
Observable.just("Hello, world!")
.map(s -> s.hashCode())
.map(i -> Integer.toString(i))
.subscribe(s -> System.out.println(s));
//可以任意步加密,想怎么弄怎么弄,弄得不爽,又还原回去都可以
Observable.just("Hello, world!")
.map(s -> s.hashCode())
.map(i -> Integer.toString(i))
.subscribe(s -> System.out.println(s));
1.Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。
2.Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。
//总的一句话,就是,小偷(Observable)比较灵活,想干嘛干嘛,反正警察(Subscriber)最后会过来给我擦屁股的
详细解说:http://blog.csdn.net/lzyzsd/article/details/41833541/