猿问

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

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


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 在我的方法之外声明并在活动打开期间更改,但我的 Subscription 仅考虑这些的第一个值。我原以为每次有新电话时,他们都会采用最新的值。


我究竟做错了什么 ?


浮云间
浏览 134回答 2
2回答

白衣染霜花

如果我正确理解你的问题,使用 Observable.defer 应该可以解决问题Observable<Integer> mergedObservers = Observable.defer {&nbsp; &nbsp; firstAPI.getFirstInfo(userLat, userLong)}.flatMap ...

Smart猫小萌

你的方法应该是这样的:&nbsp;Observable.combineLatest(userLatObservable,&nbsp;userLongObervable,&nbsp;yourmergerfunction).flatmap(&nbsp;lat,&nbsp;long&nbsp;–>&nbsp;firstApi.get(lat,&nbsp;long))...&nbsp;Etc..我认为你的问题是你如何获得 userLat 和 userLong 的值......这些值应该首先转换为 Observables 以将它们加入链中。
随时随地看视频慕课网APP

相关分类

Java
我要回答