如何使用RxJava在onNext()中抛出错误 。订阅( 新行动1(){ @凌驾 公共无效呼叫(响应){ if(response.issucess()) //成功 其他的 //抛出一个可丢弃的(response.getMessage()) } }, 新行动1(){ @凌驾 公共无效呼叫(可丢弃可丢弃){ //从onNext()处理可丢弃的投掷; } } );

如何使用RxJava在onNext()中抛出错误 。订阅( 新行动1(){ @凌驾 公共无效呼叫(响应){ if(response.issucess()) //成功 其他的 //抛出一个可丢弃的(response.getMessage()) } }, 新行动1(){ @凌驾 公共无效呼叫(可丢弃可丢弃){ //从onNext()处理可丢弃的投掷; } } );,java,rx-java,Java,Rx Java,我不想在onNext()中处理(!response.issucess())。我怎样才能将它扔给onError(),并与其他可丢弃的一起处理?您可以flatMap您对响应或错误的响应 .subscribe( new Action1<Response>() { @Override public void call(Response response) { if (response.isSuccess())

我不想在
onNext()
中处理
(!response.issucess())
。我怎样才能将它扔给
onError()
,并与其他可丢弃的一起处理?

您可以
flatMap
您对响应或错误的响应

.subscribe(
    new Action1<Response>() {
        @Override
        public void call(Response response) {
            if (response.isSuccess())
            //handle success
            else
            //throw an Throwable(reponse.getMessage())
        }
    },
    new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            //handle Throwable throw from onNext();
        }
    }
);
flatMap(新函数1(){
@凌驾
公共可观察呼叫(响应){
if(response.issucess()){
返回可观察的。公正(响应);
}否则{
返回Observable.error(新的Throwable(response.getMessage());
}
}
})

如果故障异常扩展了RuntimeException,则

flatMap(new Func1<Response, Observable<Response>>() {
    @Override
    public Observable<Response> call(Response response) {
        if(response.isSuccess()){
            return Observable.just(response);
        } else {
            return Observable.error(new Throwable(response.getMessage()));
        }
    }
})

<>这是最好的,如果你尽可能早地抛出异常,那么你就可以很容易地完成重试,替代的响应等等。我的建议是使用
map
,因为它不会生成新的
Observable
对象(与
flatMap
相比,后者会生成新的
Observable
对象):

.map(新函数1(){
@凌驾
公众回应电话(回应){
if(response.issucess()){
返回响应;
}否则{
抛出新的可丢弃对象(response.getMessage());
}
}
})

FYI:map确实创建了一个新的可观察对象,它只是在内部为您创建。抛出时扩展RuntimeException的异常不会崩溃吗,因为它们不是由RxJava处理的?
.doOnNext(response -> {
  if(!response.isSuccess())
    throw new FailureException(response.getMessage());
})
.subscribe(
    item  -> { /* handle success */ },
    error -> { /* handle failure */ }
);
.map(new Func1<Response, Response>() {
    @Override
    public Response call(Response response) {
        if (response.isSuccess()) {
            return response;
        } else {
            throw new Throwable(reponse.getMessage()));
        }
    }
 })