RxJava2编译错误"找不到符号方法body()"

时间:2018-05-09 15:52:28

标签: java response retrofit2 rx-java2

我在代码部分

中遇到编译错误
mCompositeDisposable.add(
            Flowable.just(Boolean.TRUE)
                .flatMap( ignored ->
                        service.getPosts(offset,limit, PreferencesUtils.getAccessTokenKey()) )
                .subscribeOn(Schedulers.io())
                .doOnNext(response -> {
                    if (!response.isSuccessful()) throw new IllegalAccessException();
                })
                .retryWhen( error -> error.flatMap( f -> {
                    if(f instanceof IllegalAccessException)
                        return Helper.refreshToken();
                    else 
                        return Flowable.error(f);
                }))
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(
                        successResponse -> {
                            if (!successResponse.body().isEmpty()) {
                                mView.showNewsFeedItems(successResponse.body());
                            }
                        },
                        failResponse -> { mView.showError(); }
            ));

这行代码IDE很好地识别并且没有给出任何异常或警告 successResponse的类型为Response<List<Object>>,但编译器也没有想到并给我error: cannot find symbol method body()我找不到相似的问题&amp;回答如何解决这个问题。我将非常感谢有关此问题的任何信息!

if (!successResponse.body().isEmpty()) { mView.showNewsFeedItems(successResponse.body()); }

更新

当我使用Observer(带Observable)时,一切正常,但成本高昂

 .subscribe(new Observer<Response<List<NewsFeed>>>() { // lambda doesnt work properly here (in progress)
                @Override public void onSubscribe(Disposable s) {}
                @Override public void onNext(Response<List<NewsFeed>> feeds) {if(!feeds.body().isEmpty()) mView.showNewsFeedItems(feeds.body());}
                @Override public void onError(Throwable e) {}
                @Override public void onComplete() {}
            });

1 个答案:

答案 0 :(得分:0)

如果保证需要此发射,请尝试使用Single.just()。它将为您带来可以在CompositeDisposable中添加的Disposable。订阅Flowable返回订阅,而非Disposable。