当我们使用RX Java在android中成功进行另一个呼叫时,如何确保网络呼叫的执行已完成

时间:2018-07-17 17:39:24

标签: android retrofit2 rx-java2 rx-android

我有两个网络调用,都在方法xyz中调用。

网络通话如下:

SingleObserver<RegisterResponse> observer = new SingleObserver<RegisterResponse>() {
     @Override
     public void onSubscribe(@NonNull Disposable d) {
      }

      @Override
      public void onSuccess(@NonNull RegisterResponse registerResponse) {
        }
     }

     @Override
     public void onError(@NonNull Throwable e) {
      }
     }
    };

这是我的另一个网络通话:

TrueTimeRx.build().initializeRx("time.apple.com")
.subscribeOn(Schedulers.io())
.subscribe(date -> {
 Timber.d("TrueTime was initialized at: %s" + date);
 actualDate = TrueTime.now();
 }, throwable -> {
 });

我想确保在开始第一个网络呼叫的成功之前设置了实际日期。有时第二个网络呼叫的执行失败,因为第一个网络呼叫执行得非常快。

任何人都可以让我知道如何在调用onSuccess之前确保设置实际日期。

1 个答案:

答案 0 :(得分:0)

由于您需要第一个网络呼叫的结果,因此您可以使用Observable而不是SingleObserver。在Observable中,还有另一个回叫onNext。因此,您可以在此onNext()块中初始化第二个网络。这样一来,始终可以确保在拨打第二个网络电话之前获得结果。