【问题标题】:How to pass variable parameters to Observer?如何将可变参数传递给观察者?
【发布时间】:2019-01-24 09:08:46
【问题描述】:

我有两个与 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 在我的方法之外声明,并在活动打开期间更改,但我的订阅仅考虑其中的第一个值。我原以为每次有新调用时,它们都会采用最新的值。

我做错了什么?

【问题讨论】:

  • 你试过使用 combineWithLatest 吗?
  • @ArchieG.Quiñones 我已经研究了几个小时,但找不到解决方案。我认为我应该为该位置创建一个 Observable,并且在每次调用 subscribe 时,向第一个 API 提供该位置,但不推荐直接创建一个 Observable。
  • 我不明白这是怎么回事.. Observable.combineLatest(firstobservable, secondobservable, )
  • 我想我误解了你的问题。所以为了澄清你希望每次你的 userLong 和 userLat 改变值时。你应该从流中得到另一个值。对吗?
  • @ArchieG.Quiñones 是的。用户改变了他的位置,如果在第二次调用 Observable 时纬度和经度发生了变化,则应该使用新位置调用 API。如果我这样放置变量,Observable 将仅使用参数的第一个值进行调用,并且在它们发生变化时不会更改它们。

标签: java android rx-java observable rx-android


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你的方法应该是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2019-02-25
      • 1970-01-01
      • 2017-01-23
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多