我已经实现了这样的POJO。
public class WebResponse<T> {
private String Response;
private String Message;
private T Result;
}
如果Response
成功,我会在Result
收到一系列国家/地区。
要在Country
上执行合成操作,只有flatMap
'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()
。
如果不破坏链条怎么办呢?
答案 0 :(得分:4)
您是否尝试过类似下面的代码?
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
函数,如果响应无效,则返回Observable.error
。
答案 1 :(得分:0)
我遇到了同样的问题,之前我在onError(null)方法中发送了null。 所以我去了RXJava lib。如果我们在onError方法中发送null,则在RXJava内部,它们具有空检查并调用onComplete方法。
如: - 所以它更好而不是发送null.Send NullPointerException(&#34; volley返回null&#34;)