【问题标题】:RxJava2 compile error "cannot find symbol method body()"RxJava2 编译错误“找不到符号方法体()”
【发布时间】:2018-05-09 15:52:27
【问题描述】:

那部分代码出现编译错误

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() 我找不到类似的问题和答案如何解决这个问题。我将非常感谢有关此问题的任何信息!

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() {}
            });

【问题讨论】:

  • getPosts 是如何定义的?你在什么平台上使用什么编译器版本?
  • @akarnokd Observable>> 参数 compileSdkVersion 27 中带有 2 个“@Query”和 1 个“@Header”

标签: java response retrofit2 rx-java2


【解决方案1】:

如果您保证需要此排放,请尝试使用 Single.just()。它将带您返回可添加到 CompositeDisposable 内部的 Disposable。订阅 Flowable 返回订阅,而不是 Disposable。

【讨论】:

  • 感谢您的回复。我刚才将其更改为可流动的。当我添加(新观察者)以覆盖覆盖的 onComplete 订阅时,在 observable 上工作正常,onSubscribe 我不需要的东西,在 Flowable 上我不能使用观察者,它看起来很昂贵 2 个空方法。当我使用 lambda 时情况是等价的
  • 查看我编辑的评论并提供反馈。如果你用 Observable 说话,它可以正常工作,那么原因在于你在 CompositeDisposable 内部传递的类型错误。尝试使用 Single - 它的设计目的是仅在您的情况下产生一次发射,并返回 Disposable
  • CompositeDisposable 在这种情况下不起重要作用,当我使用 'new Observer>>() { .. 4 个覆盖方法,其中 1 个是订阅方法中不为空 }'。当我想使用 lamdas 时,Observable、Flowable、Single 不起作用,我每次都会遇到编译错误
  • 好的,你能发布你的观察者实现吗?我认为它可以帮助我们。听起来有点奇怪。您是说您在观察者中仅覆盖了 1 个方法,但在 lambda 中,您为消费者和错误传递了两个参数
猜你喜欢
  • 2021-02-28
  • 2016-02-10
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 2015-11-06
相关资源
最近更新 更多