【发布时间】: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