之前我们做的都是onNext,onCompleted和onError三个方法都回调, 但是有时候因为需求不需要这么多回调, 下面就是单个方法的回调;
//这么写会报错的, 为什么呢? 这也是我踩过的坑;
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("wsl");
subscriber.onNext("wsl1");
subscriber.onNext("wsl2");
subscriber.onNext("wsl3");
subscriber.onCompleted();
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
}
});
正确的姿势是这样的:
Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("wsl");
subscriber.onNext("wsl1");
subscriber.onNext("wsl2");
subscriber.onNext("wsl3");
subscriber.onCompleted();
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});
下面是集中action:
//相当月onNext
Action1<String> action1 = new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
};
//相当于onError
Action1<Throwable> action11 = new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
};
//相当于onCompleted
Action0 action0 = new Action0() {
@Override
public void call() {
System.out.println("onCompleted");
}
};
想回调那个方法就把上面的那个action1替换就可以了,灵活!
上面的代码的输出结果:
09-13 10:21:07.868 17748-17748/cn.xianzaishi.rxjava I/System.out: wsl
09-13 10:21:07.869 17748-17748/cn.xianzaishi.rxjava I/System.out: wsl1
09-13 10:21:07.869 17748-17748/cn.xianzaishi.rxjava I/System.out: wsl2
09-13 10:21:07.869 17748-17748/cn.xianzaishi.rxjava I/System.out: wsl3
从结果看的出, 并没有输出onCompleted, 尽管调用了;因为我们只回调了Action1(他相当于onNext回调方法);
写到这里, 基本的用法就完了, 后面就是上硬菜的时候了!!!