如何将可变参数传递给观察者?

How to pass variable parameters to Observer?

我有两个观察者与一个平面地图合并。第一个观察者 returns 调用第二个时使用的值。

Observable<Integer> mergedObservers = firstAPI.getFirstInfo(userLat, userLong)
.flatMap(resultFirstObservable -> {
     try {
        return secondApi.getSecondInfo(resultFirstObservable.body().string(), "3") 
        .onErrorResumeNext(e -> {
            e.printStackTrace();
             return secondApi.getSecondInfo("defaultValue", "3");
          });
      } catch (IOException e) {
           e.printStackTrace();
           secondApi.getSecondInfo("defaultValue", "3") 
        .onErrorResumeNext(e -> {
            e.printStackTrace();
             return secondApi.getSecondInfo("defaultValue", "3");
          });
    });
}
}, (resultFirstObservable, resultSecondObservable) -> {
try {
    return transformToWhatINeed(resultSecondObservable.body().string());
} catch (IOException ex) {
    ex.printStackTrace();
    return transformToWhatINeed([]);
}
});

userLat 和 userLong 在我的方法之外声明,并在 activity 打开期间更改,但我的订阅仅考虑这些的第一个值。我原以为每次有新电话时,他们都会采用最新值。

我做错了什么?

你的方法应该是这样的:

 Observable.combineLatest(userLatObservable, userLongObervable, yourmergerfunction).flatmap( lat, long –> firstApi.get(lat, long))... Etc..

我认为你的问题是如何获取 userLat 和 userLong 的值...这些值应该首先转换为 Observables 以将它们加入链中。

如果我正确理解你的问题,使用 Observable.defer 应该可以解决问题

Observable<Integer> mergedObservers = Observable.defer {
    firstAPI.getFirstInfo(userLat, userLong)
}.flatMap ...