如何在onComplete中使用observable(Rxjava2)

如何在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

我正在用尽可能多的rxjava语言编写我的应用程序,我遇到了以下问题

我有一种方法可以将数据与api同步,并根据时间戳下载内容。因此,我想要以下数据流:

获取最后一个时间戳->下载数据->保存数据->如果没有出现错误,则更新时间戳

问题是,我从api响应接收时间戳以避免设备之间的日期差异,并且一旦我转换api响应,我就会丢失时间戳

以下是当前流程的简化:

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)
            )
    );