[英]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
了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
的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
函數,如果響應無效,則返回Observable.error
。
我在onError(null)方法中發送null之前遇到了同樣的問題。 所以我去扔了RXJava庫。 在RXJava內部,如果我們在onError方法中發送null,則它們具有null檢查並調用onComplete方法。
例如:-所以最好不要發送null。發送NullPointerException(“ volley返回null”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.