1

我已经实现了这样的 POJO。

public class WebResponse<T> {

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

例如,如果Response成功,我将收到Result.

Country为了在s上执行组合操作,我只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. 发生这种情况时,我想触发Subscribers onError()

我怎样才能在不破坏链条的情况下做到这一点?

4

2 回答 2

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在响应无效时返回一个。

于 2015-04-14T10:56:46.933 回答
0

我遇到了同样的问题,在我在 onError(null) 方法中发送 null 之前。所以我扔了RXJava lib。在 RXJava 内部,如果我们在 onError 方法中发送 null,它们会进行 null 检查并调用 onComplete 方法。

例如:- 所以最好不要发送 null.Send NullPointerException("volley returns null")

于 2016-07-03T19:57:01.320 回答