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

标签 java android reactive-programming rx-java rx-android

我已经实现了一个像这样的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/

相关文章:

java - 使用 Java 从 UNIX 时间戳转换为 "Today at: currentTime"

java - 找不到元素 'tx:annotation-driven' 的声明

Android 通知 LED 不使用我的颜色

android - Play商店的应用描述更新

javascript - 意外的冷 Observable 行为

swift - 从 Observable 中只获取一个值

java - Spring Security SwitchUserFilter exitUserUrl 被忽略?

java - JPA 与 "where"子句不同

android - 在 Android 中发送短信 Intent

java - 从过滤后的 Observable 返回最终列表