【发布时间】:2019-07-22 11:36:02
【问题描述】:
我目前正在调用 rest api 并在 UI 上显示数据。我正在使用 rxAndroid 和 Retrofit。以下是代码:
disposable.add(apiService.getIncidents(1, "true")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<IncidentResponse, List<Incident>>() {
@Override
public List<Incident> apply(
@io.reactivex.annotations.NonNull final IncidentResponse incidentResponse)
throws Exception {
return incidentResponse.getIncidents();
}
})
.subscribe(new Consumer<List<Incident>>() {
@Override
public void accept(
@io.reactivex.annotations.NonNull final List<Incident> incidents)
throws Exception {
recyclerView.setAdapter(mIncidentAdapter);
displayIncidents(incidents);
}
})
);
这工作正常,我能够获取数据并在 UI 上显示。现在作为增强功能的一部分,即使我的应用程序处于后台或被终止,我也需要定期获取这些数据。我尝试了以下代码:
disposable.add(((apiService.getIncidents(1, "true")).interval(10,TimeUnit.SECONDS))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Function<IncidentResponse, List<Incident>>() {
@Override
public List<Incident> apply(
@io.reactivex.annotations.NonNull final IncidentResponse incidentResponse)
throws Exception {
return incidentResponse.getIncidents();
}
})
.subscribe(new Consumer<List<Incident>>() {
@Override
public void accept(
@io.reactivex.annotations.NonNull final List<Incident> incidents)
throws Exception {
recyclerView.setAdapter(mIncidentAdapter);
displayIncidents(incidents);
}
})
);
但是我在方法映射中遇到编译错误,“在 Observable 中无法应用”。这是正确的方法还是不能使用 RxAndroid 完成?
【问题讨论】:
-
你需要像
Observable.interval(10,TimeUnit.SECONDS).flatMap(i -> apiService.getIncidents(1, "true"))这样称呼它——应该可以。如果您不需要旧请求(如果请求超过 10 秒),您可以使用switchMap()而不是flatMap()
标签: java android retrofit rx-java rx-android