RxJava2编译错误“;找不到符号方法体();

RxJava2编译错误“;找不到符号方法体();,java,response,retrofit2,rx-java2,Java,Response,Retrofit2,Rx Java2,我在那部分代码中遇到了一个编译错误 mCompositeDisposable.add( Flowable.just(Boolean.TRUE) .flatMap( ignored -> service.getPosts(offset,limit, PreferencesUtils.getAccessTokenKey()) ) .subscribeOn(Sc

我在那部分代码中遇到了一个编译错误

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
,但编译器的思维方式不太好,并给出了
错误:找不到symbol方法body()
我找不到类似的问题和答案如何解决此问题。我将非常感谢关于这个问题的任何信息

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() {}
            });
.subscribe(new Observer(){//lambda在此无法正常工作(正在进行)
@覆盖订阅上的公共void(一次性的{}
@重写公共void onNext(响应提要){if(!feeds.body().isEmpty())mView.showNewsFeedItems(feeds.body());}
@重写公共无效onError(可丢弃的e){}
@重写公共void onComplete(){}
});

如果需要,请尝试使用Single.just()。它会带你回到一次性的,可以添加到复合材料内。订阅Flowable returns订阅,而不是一次性订阅。

感谢您的回复。我刚才把它改成了流动的。当我添加(新的观察者)订阅覆盖的onComplete时,at observable工作得很好,onSubscribe我不需要什么,在Flowable上我不能使用observer,它看起来很昂贵2个空方法。当我使用lambda时,情况相当于查看我编辑的评论并给出反馈。如果你说的是Observable,那么原因是你在CompositeDisposable中传递的类型错误。尝试使用Single-它被设计为仅产生一个发射(仅针对您的情况),并返回DisposableCompositeDisposable在这种情况下不起重要作用,Observable在subscribe方法中使用“new Observer(){..4重写方法,其中1不是空的}”时工作正常。当我想使用lamdas时,可观察的、可流动的、单一的不起作用,每次我都会遇到编译错误好的,你能发布你的观察者实现吗?我想它可以帮助我们。听起来有点奇怪。您是说您在observer中只重写了1个方法,但在lambda中,您为consumer和error传递了两个参数
getPosts
是如何定义的?您在哪个平台上使用哪个编译器版本?@akarnokd可观察到,参数compileSdkVersion 27中有2'@Query'和1'@Header'