您的位置:首页 > 编程语言 > Java开发

RxJava的坑

2016-05-03 14:48 609 查看
情况一:

Observable.create((Observable.OnSubscribe<String>) subscriber -> {
subscriber.onNext("aaaa");
subscriber.onNext("bbbb");
subscriber.onError(new NullPointerException());
subscriber.onNext("cccc");
subscriber.onNext("dddd");
subscriber.onCompleted();
}).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}

@Override
public void onNext(String s) {
System.out.println("s=" + s);
}
});
}


这种情况输出为

s=aaaa
s=bbbb
java.lang.NullPointerException


情况二:

Observable.create((Observable.OnSubscribe<String>) subscriber -> {
subscriber.onNext("aaaa");
subscriber.onNext("bbbb");
subscriber.onError(new NullPointerException());
subscriber.onNext("cccc");
subscriber.onNext("dddd");
subscriber.onCompleted();
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}

@Override
public void onNext(String s) {
System.out.println("s=" + s);
}
});
}


这种情况就只会输出

java.lang.NullPointerException


解决方法:

Observable.create((Observable.OnSubscribe<String>) subscriber -> {
subscriber.onNext("aaaa");
subscriber.onNext("bbbb");
subscriber.onError(new NullPointerException());
subscriber.onNext("cccc");
subscriber.onNext("dddd");
subscriber.onCompleted();
}).subscribeOn(Schedulers.io())
.materialize()
.observeOn(AndroidSchedulers.mainThread())
.<String>dematerialize()
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}

@Override
public void onError(Throwable e) {
e.printStackTrace();
}

@Override
public void onNext(String s) {
System.out.println("s=" + s);
}
});
}


Meterialize操作符将OnNext/OnError/OnComplete都转化为一个Notification对象并按照原来的顺序发射出来,而DeMeterialize则是执行相反的过程。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: