gpt4 book ai didi

java - 如果 RxJava 中结果无效,如何发送 onError

转载 作者:行者123 更新时间:2023-12-01 18:15:50 24 4
gpt4 key购买 nike

我已经实现了一个像这样的POJO。

public class WebResponse<T> {

private String Response;
private String Message;
private T Result;
}

举个例子,如果Response成功,我将在Result中收到一个国家/地区数组。

为了仅对Country执行组合操作,我对WebResponse进行了flatMap并应用了相关运算符。就像这样:

    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);
}
});

现在服务器本身有可能会发送失败,该失败将出现在响应中。发生这种情况时,我想触发订阅者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

关于java - 如果 RxJava 中结果无效,如何发送 onError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29624829/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com