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

Java 如何将可变参数传递给观察者?,java,android,rx-java,observable,rx-android,Java,Android,Rx Java,Observable,Rx Android,我有两个与平面图合并的观察者。第一个观察者返回在调用第二个观察者时使用的值 Observable<Integer> mergedObservers = firstAPI.getFirstInfo(userLat, userLong) .flatMap(resultFirstObservable -> { try { return secondApi.getSecondInfo(resultFirstObservable.body().string(),

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

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([]);
}
});
Observable mergedObservers=firstAPI.getFirstInfo(userLat,userLong)
.flatMap(resultFirstObservable->{
试一试{
返回secondApi.getSecondInfo(resultFirstObservable.body().string(),“3”)
.onErrorResumeNext(e->{
e、 printStackTrace();
返回secondApi.getSecondInfo(“defaultValue”,“3”);
});
}捕获(IOE异常){
e、 printStackTrace();
secondApi.getSecondInfo(“defaultValue”,“3”)
.onErrorResumeNext(e->{
e、 printStackTrace();
返回secondApi.getSecondInfo(“defaultValue”,“3”);
});
});
}
},(resultFirstObservable,resultSecondObservable)->{
试一试{
返回TransformToWhatined(resultsCondobservable.body().string());
}捕获(IOEX异常){
例如printStackTrace();
将转换返回到指定的([]);
}
});
userLat和userLong在我的方法之外声明,并在活动打开期间更改,但我的订阅只考虑它们的第一个值。我希望每次有新的呼叫时,他们都会接受最新的值


我做错了什么?

您的方法应该是:

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

我想你的问题是如何得到userLat和userLong的值。。。这些值应首先转换为可观测值,以将它们加入到链中。

如果我正确理解您的问题,请使用Observable.defer解决问题

Observable<Integer> mergedObservers = Observable.defer {
    firstAPI.getFirstInfo(userLat, userLong)
}.flatMap ...
Observable=Observable.defer{
getFirstInfo(userLat,userLong)
}.平面地图。。。

你试过使用combineWithLatest吗?@ArchieG.Quiñones我已经研究了几个小时,没有找到解决方案。我想我应该为这个位置创建一个可观察的对象,在每次调用subscribe时,向第一个API提供这个位置,但是直接创建一个可观察的对象是不可取的。我不明白这是怎么回事。。我想我误解了你的问题。。因此,为了澄清,您希望每次您的userLong ans userLat更改值。。您应该从流中获取另一个值。。“我说得对吗?”阿奇格·奎尼翁说,是的。用户改变了他的位置,如果纬度和经度在第二次调用Observable时发生了变化,则应使用新位置调用API。如果我这样放置变量,可观察对象将仅使用参数的第一个值进行调用,而不会在参数发生更改时更改它们。