对于大多数初学者来说,看到RxJava的代码是懵逼的,我也一样,特别是链式的代码,一看就懵逼,最近,稍微搞清楚了一点,以此小记一番:
首先,我们来看常规的代码
//创建一个Observable<可观察的对象>:
public static Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("hello");
emitter.onComplete();
}
});
//创建一个Observer<观察者>
public static Observer observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("observer-->onSubscribe");
}
@Override
public void onNext(String value) {
System.out.println("observer-onNext->"+value);
}
@Override
public void onError(Throwable e) {
System.out.println("observer-->onError");
}
@Override
public void onComplete() {
System.out.println("observer-->onComplete");
}
};
//可观察者和观察者之间建立联系
observable.subscribe(observer);
看到这里,大多数同学还是可以看明白的,因为这是很常规的代码,两个对象而已,没了
这段代码的输出的结果是:
observer-->onSubscribe observer-onNext->hello observer-->onComplete
然后变一个样式,链式的时候是这样的
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("2");
emitter.onComplete();
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("observer-->onSubscribe");
}
@Override
public void onNext(String value) {
System.out.println("observer-onNext->" + value);
}
@Override
public void onError(Throwable e) {
System.out.println("observer-->onError");
}
@Override
public void onComplete() {
System.out.println("observer-->onComplete");
}
});
上面两段代码的效果是完全一模一样的啊。只是写法简洁了很多,但是对于初学者来说看起来就比较困难了
下面来看看just
Observable.just("hello").subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("observer-->onSubscribe");
}
@Override
public void onNext(String value) {
System.out.println("observer-onNext->" + value);
}
@Override
public void onError(Throwable e) {
System.out.println("observer-->onError");
}
@Override
public void onComplete() {
System.out.println("observer-->onComplete");
}
});
这段代码,看起来是不是似曾相识的感觉,Observable 的 create 方法返回的是一个 Onservable对象, 同样的,just 方法也是返回的也是一个 Observable、
这就很明白了,而两者的区别就是:Just是现有的数据,不用做处理,用 create 的方法,可以在 subscribe 里面做一些操作,包括对数据的处理等,最后调用 onNext 的时候把相应的数据发送出去
下面来看看 map 操作
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("2");
emitter.onComplete();
}
}).map(new Function<String, Integer>() {
//map基本作用就是将一个Observable通过某种函数关系,转换为另一种Observable,
//这个例子中就是把我们的String数据变成了Integer类型
@Override
public Integer apply(String s) throws Exception {
return Integer.parseInt(s);
}
}).subscribe(new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("observer-->onSubscribe");
}
@Override
public void onNext(Integer value) {
System.out.println("observer-onNext->" + value);
}
@Override
public void onError(Throwable e) {
System.out.println("observer-->onError");
}
@Override
public void onComplete() {
System.out.println("observer-->onComplete");
}
});
这个和第二段代码的区别是,里面多了一个map的操作,你点击 map 进去你就会发现, map 也是返回的是一个 Observable 对象
这个例子中,看最后的 subscribe 的时候 Observer 的类型也相应的变化了,由原来的 String 类型变成了 Integer 类型
没错,这就是map的操作,map的作用就是使 Obasevable 的类型发生变化
这里要注意的是 Function 的第一个参数是原来Observable的对象的类型,而第二个参数是经过转换后的Observable的类型,可以粗略的理解成方法入参和返回值吧
暂且记叙到这里:2017-11-15 22:50 广州

浙公网安备 33010602011771号