如何在onComplete中使用observable(Rxjava2)
我正在用尽可能多的rxjava语言编写我的应用程序,我遇到了以下问题 我有一种方法可以将数据与api同步,并根据时间戳下载内容。因此,我想要以下数据流: 获取最后一个时间戳->下载数据->保存数据->如果没有出现错误,则更新时间戳 问题是,我从api响应接收时间戳以避免设备之间的日期差异,并且一旦我转换api响应,我就会丢失时间戳 以下是当前流程的简化:如何在onComplete中使用observable(Rxjava2),java,rx-java,rx-java2,Java,Rx Java,Rx Java2,我正在用尽可能多的rxjava语言编写我的应用程序,我遇到了以下问题 我有一种方法可以将数据与api同步,并根据时间戳下载内容。因此,我想要以下数据流: 获取最后一个时间戳->下载数据->保存数据->如果没有出现错误,则更新时间戳 问题是,我从api响应接收时间戳以避免设备之间的日期差异,并且一旦我转换api响应,我就会丢失时间戳 以下是当前流程的简化: class Response { Date timeStamp; Data data; } interface IRepos
class Response
{
Date timeStamp;
Data data;
}
interface IRepository
{
Completable insert(Data data);
}
interface IWebService
{
Observable<Response> getByLastUpdate(Date date);
}
class SyncPreferences
{
public Date getLastDownloadDate() { /**/ }
public void setLastDownloadDate(Date date){ /**/ }
}
public class SyncService
{
private final IRepository repository;
private final IWebService webService;
private final SyncPreferences syncPreferences;
public SyncService(IRepository repository, SyncPreferences syncPreferences, IWebService webService)
{
this.repository = repository;
this.webService = webService;
this.syncPreferences = syncPreferences;
}
private Completable sync()
{
return webService.getByLastUpdate(syncPreferences.getLastDownloadDate())
.doOnComplete((response) -> {
syncPreferences.setLastDownloadDate(response.timeStamp)
}) // What I would like to do
.flatMapCompletable((response) -> {
repository.insert(response.data);
});
}
}
我是RxJava新手,所以如果您有一般性的建议,我很乐意知道=]
另外,我不知道这段代码是否可以编译,因为我只是把它写在这里作为示例。这段代码怎么样:
webService.getByLastUpdate(syncPreferences.getLastDownloadDate())
.flatMapCompletable(response ->
repository
.insert(response.data)
.doOnComplete(() ->
syncPreferences.setLastDownloadDate(response.timeStamp)
)
);
webService.getByLastUpdate(syncPreferences.getLastDownloadDate())
.flatMapCompletable(response ->
repository
.insert(response.data)
.doOnComplete(() ->
syncPreferences.setLastDownloadDate(response.timeStamp)
)
);