Ошибка компиляции RxJava2 "не удается найти метод символа body ()" - PullRequest
0 голосов

Я получил ошибку компиляции в этой части кода

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

1 Ответ

0 голосов
/ 09 мая 2018

Попробуйте использовать Single.just (), если вам нужна эта эмиссия. Это вернет вам Disposable, который можно добавить внутри CompositeDisposable. Подпишитесь на текучую возвратную подписку, а не одноразовую.

...