如果结果在 RxJava 中无效,如何发送 onError
How to send onError if result is invalid in RxJava
我已经实现了这样的 POJO。
public class WebResponse<T> {
private String Response;
private String Message;
private T Result;
}
例如,如果 Response
成功,我将收到 Result
中的一系列国家/地区。
为了在 Country
上执行组合操作,我只 flatMap
'd WebResponse 并应用了相关的运算符。像这样:
Observable<WebResponse<ArrayList<Country>>> countryListAsObservable = api.getCountryListAsObservable();
countryListAsObservable
.subscribeOn(AndroidSchedulers.mainThread())
.flatMap(
new Func1<WebResponse<ArrayList<Country>>, Observable<?>>() {
@Override
public Observable<Country> call(WebResponse<ArrayList<Country>> arrayListWebResponse) {
return Observable.from(arrayListWebResponse.getResult());
}
})
.map(new Func1<Country, String>() {
@Override
public String call(Country country) {
return country.getName();
}
})
.subscribe(
new Action1<String>() {
@Override
public void call(String o) {
Log.i("Country name", o);
}
});
现在服务器本身有可能会在 Response
中发送失败。发生这种情况时,我想触发 Subscriber
s onError()
.
如何在不破坏链条的情况下做到这一点?
你试过类似下面的代码吗?
countryListAsObservable.flatMap(new Func1<WebResponse<ArrayList<Country>>, Observable<?>>() {
@Override
public Observable<Country> call(final WebResponse<ArrayList<Country>> response) {
if (!isValidResponse(response)) {
return Observable.error(new Exception("Response is invalid"));
} else {
return Observable.from(response.getResult());
}
}
public boolean isValidResponse(final WebResponse<ArrayList<Country>> response) {
return response != null && response.getResult() != null;
}
});
想法是稍微修改 flatMap
函数,如果响应无效,return 一个 Observable.error
。
在我在 onError(null) 方法中发送 null 之前,我遇到了同样的问题。
所以我扔了 RXJava 库。在 RXJava 内部,如果我们在 onError 方法中发送 null,它们会检查 null 并调用 onComplete 方法。
例如:-
所以最好不要发送 null.Send NullPointerException("volley returns null")
我已经实现了这样的 POJO。
public class WebResponse<T> {
private String Response;
private String Message;
private T Result;
}
例如,如果 Response
成功,我将收到 Result
中的一系列国家/地区。
为了在 Country
上执行组合操作,我只 flatMap
'd WebResponse 并应用了相关的运算符。像这样:
Observable<WebResponse<ArrayList<Country>>> countryListAsObservable = api.getCountryListAsObservable();
countryListAsObservable
.subscribeOn(AndroidSchedulers.mainThread())
.flatMap(
new Func1<WebResponse<ArrayList<Country>>, Observable<?>>() {
@Override
public Observable<Country> call(WebResponse<ArrayList<Country>> arrayListWebResponse) {
return Observable.from(arrayListWebResponse.getResult());
}
})
.map(new Func1<Country, String>() {
@Override
public String call(Country country) {
return country.getName();
}
})
.subscribe(
new Action1<String>() {
@Override
public void call(String o) {
Log.i("Country name", o);
}
});
现在服务器本身有可能会在 Response
中发送失败。发生这种情况时,我想触发 Subscriber
s onError()
.
如何在不破坏链条的情况下做到这一点?
你试过类似下面的代码吗?
countryListAsObservable.flatMap(new Func1<WebResponse<ArrayList<Country>>, Observable<?>>() {
@Override
public Observable<Country> call(final WebResponse<ArrayList<Country>> response) {
if (!isValidResponse(response)) {
return Observable.error(new Exception("Response is invalid"));
} else {
return Observable.from(response.getResult());
}
}
public boolean isValidResponse(final WebResponse<ArrayList<Country>> response) {
return response != null && response.getResult() != null;
}
});
想法是稍微修改 flatMap
函数,如果响应无效,return 一个 Observable.error
。
在我在 onError(null) 方法中发送 null 之前,我遇到了同样的问题。 所以我扔了 RXJava 库。在 RXJava 内部,如果我们在 onError 方法中发送 null,它们会检查 null 并调用 onComplete 方法。
例如:- 所以最好不要发送 null.Send NullPointerException("volley returns null")