Java 完成前可观察到的是空的

Java 完成前可观察到的是空的,java,android,rx-java,rx-java2,Java,Android,Rx Java,Rx Java2,我正在尝试创建一个存储库,如果可以,它将从缓存中获取数据,如果不能,它将调用网络 我正在尝试使用诸如isEmpty或firstOrError之类的函数,但它们都要求在isEmpty发出之前完成可观察对象。但是,发出缓存中项目的可观察对象永远不会完成,因为它需要更新对演示者的任何更改 这是我目前所拥有的,但目前还不起作用 getCacheSource() .isEmpty() .subscribe(isEmpty -> { if (!isNetworkIn

我正在尝试创建一个存储库,如果可以,它将从缓存中获取数据,如果不能,它将调用网络

我正在尝试使用诸如
isEmpty
firstOrError
之类的函数,但它们都要求在
isEmpty
发出之前完成可观察对象。但是,发出缓存中项目的可观察对象永远不会完成,因为它需要更新对演示者的任何更改

这是我目前所拥有的,但目前还不起作用

getCacheSource()
    .isEmpty()
    .subscribe(isEmpty -> {
          if (!isNetworkInProgress() && isEmpty) {
              dataProviderDisposable = getNetworkSource().subscribe(
                  val -> { /* ignore */ },
                  RepositoryUtils::handleNonHttpException);
              }
          });

有没有一种方法可以检查observable在完成之前是否发出了任何项,或者强制完成缓存observable?

最后,我可以使用observable.merge来达到所需的效果

//If the network call is not already in progress
if (dataProviderDisposable == null || dataProviderDisposable.isDisposed())) {
    dataProviderDisposable = Observable.merge(getCacheSource(), getNetworkSource())
            .firstElement()
            .subscribe((boosterData) -> {}, this::handleNonHttpException);
}
return getCacheSource();
这将通过检查数据呼叫是否已被释放来检查网络呼叫是否已在进行中。如果不是,则调用merge从内存或网络中获取一个元素


如果内存中已经有数据,它只会返回数据,而不会调用网络。如果没有,它将呼叫网络

为什么不使用flatMap并从中返回正确的项目?