RxJava2多线程或出错

时间:2017-09-07 21:08:26

标签: java android multithreading rx-java2

我是rxjava的初学者,我遇到了问题。

我有两个网络电话。

Observable<ClassA> getClassA(){
  return networkExecutor.getClassAFromApi();
}
Observable<ClassB> getClassB(){
  return networkExecutor.getClassBFromApi();
}

现在我需要这两个以便代码继续进行,所以我对它们进行了压缩。此外,我想将这些值临时保存在私有类范围变量中,例如cA和cB;

 getClassA().zipWith(getClassB, (classA, classB) -> {
  cA = classA;
  cB = classB;
  return true;
}

问题是,当我稍后重复同一步骤时,cA和cB是旧值而不是新值。

例如我第一次调用cA和cB的zip方法哈希值是xxx1,xxx2

当我第二次调用相同的方法时,会从具有哈希xxx3和xxx4的网络生成新对象。

当我调用此类getter时,我得到cA xxx1而不是我应该已经得到xxx3。

2 个答案:

答案 0 :(得分:0)

您可以在事件之后使用某些do运算符来清除哈希字段,或者在继续执行新请求之前清除它们。 查看prototype。我可能会使用doAfterNext()运算符并根据需要重置字段。

答案 1 :(得分:0)

问题出在架构上,而不是设置全局组件,你应该将它们保存在流中,创建自定义类来保存值,并将它们带入。 onNext(CustomClassObject object){ // object.getClassA; }