我学习的RxJava是从1.0版本开始的,目前流行的都是2.0,但网上好多的文章都是写2.0版本,对于我这个从未接触的人来说好多地方是看不懂的(某些操作符根本不知道意思),所以只要从最基本的一步一步来,哎 人笨就是这样的---RxJava的原理我就不献丑了--下面开始正文 我只讲操作符
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello Android");
subscriber.onCompleted();
}
}); //注意:这里就是一个最普通的被观察者,可以发送三种不同类型的事件 onNext/onError/onCompleted 后面两个事件只能选择一种事件发送
// 观察者 最基本的 接受被观察者的三种事件
Observer<String> observer = new Observer<String>() {
@Override
public void onCompleted() {
Log.v(TAG,"...onCompleted...");
}
@Override
public void onError(Throwable e) {
Log.v(TAG,"...onError...");
}
@Override
public void onNext(String o) {
Log.v(TAG,"...onNext..." + o);
}
};
// 发生订阅关系
single.subscribe(observer);
以上就是一个最基础的Rxjava运用,下面开始接受各种操作符变换符等:
Single 可替代被观察者Observable,但是只能发送两种事件 onError/onSuccess
// 被观察者
Single<String> single = Single.create(new Single.OnSubscribe<String>() {
@Override
public void call(SingleSubscriber<? super String> singleSubscriber) {
singleSubscriber.onSuccess("Hello world");
// singleSubscriber.onError();
}
}); 如果发送onSuccess事件,那么观察者接受的事件为onNext---onCompleted
Subscriber 是Observer的子类 提供了解除订阅关系的方法
// 观察者--变体 Subscriber是Observer的子类 提供了解除订阅的方法和判断是否解除订阅的方法
final Subscriber<String> observer = new Subscriber<String>() {
@Override
public void onCompleted() {
Log.v(TAG,"...onCompleted...");
}
@Override
public void onError(Throwable e) {
Log.v(TAG,"...onError..." + e.getLocalizedMessage());
}
@Override
public void onNext(String o) {
Log.v(TAG,"...onNext..." + o);
}
};
observer.unsubscribe();// 解除订阅
observer.isUnsubscribed();//判断是否解除订阅
Action 我们之前说的Observer等都会接受被观察者的三个事件,如果你只想接受其中的一个或者两个关系呢? 那么就会用到action了
// 只关心onNext(), 那么被观察者发出的Error事件会发送给整个系统 因为没有处理
Action1<String> action1 = new Action1<String>() { // 请注意这个泛型
@Override
public void call(String s) {
Log.v(TAG, "...call..." + s);
}
};
// 关心error事件
Action1<Throwable> action2 = new Action1<Throwable>() { // 同样是action1 这个泛型类型是Throwable 所以它关心的是onError事件
@Override
public void call(Throwable throwable) {
Log.v(TAG,"...call..." + throwable.getLocalizedMessage());
}
};
// 关心onComplted
Action0 action0 = new Action0(){
@Override
public void call() {
Log.v(TAG,"...onCompleted...");
}
};
// 发生订阅关系 只订阅error事件是不可以的
observable.subscribe(action1,action2,action0); // 注意这里面action的顺序 onnext的是第一个
现在如果被观察者发出onNext事件,那么第一个Action1就会打印,如果发出onError事件,那么第二个Action1就会打印,如果发出onCompleted事件,那么第三个Action0就会打印了
Action总结: 所谓的action就是内部只有一个方法且没有返回值的类,Action1对应有一个参数...Action9对应有9个参数,还有一个特殊的ActionN 一般不用
Func Func和action的用法其实差不多 具体看代码
Func0<String> func0 = new Func0<String>() {
@Override
public String call() {
return null;
}
};
Func1<String,Double> func1 = new Func1<String, Double>() {
@Override
public Double call(String s) {
return null;
}
};
Func是内部只有一个方法 有返回值的类,返回值类型为最后一个参数的类型
第一次写这个 第一篇就先写到这里了,等我后续的.............