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

时间:2015-04-14 10:19:56

标签: 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上执行合成操作,只有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()

如果不破坏链条怎么办呢?

2 个答案:

答案 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;)