Android 将可选的观测值合并一次

Android 将可选的观测值合并一次,android,rx-java2,reactivex,combinelatest,Android,Rx Java2,Reactivex,Combinelatest,我使用的是运行在Android设备上的RxJava。我有两个PublishSubject,它们通过调用OnNext()定期发布从bluetooth特性接收的数据(字符串)。一个特征(A)肯定存在,另一个特征(B)可能存在,也可能不存在。我试图从他们中的一个或两个获取数据,并用它来做一些决策。我只想在连接到蓝牙设备后以及第一次从这些特性接收数据时运行一次 我真的很难让它正常工作。我可以使用combineLatest()或zip()组合观测值,并使用take()定义超时,但我的逻辑似乎总是被调用两次

我使用的是运行在Android设备上的RxJava。我有两个PublishSubject,它们通过调用OnNext()定期发布从bluetooth特性接收的数据(字符串)。一个特征(A)肯定存在,另一个特征(B)可能存在,也可能不存在。我试图从他们中的一个或两个获取数据,并用它来做一些决策。我只想在连接到蓝牙设备后以及第一次从这些特性接收数据时运行一次

我真的很难让它正常工作。我可以使用combineLatest()或zip()组合观测值,并使用take()定义超时,但我的逻辑似乎总是被调用两次

比如说

Observable.combineLatest(A, B.take(2, TimeUnit.SECONDS).defaultIfEmpty(""), (a, b) -> {
    //combine logic
    return aAndMaybeB;
}.observeOn(AndroidSchedulers.mainThread()).firstOrError().subscribe( aAndMaybeB-> {
    //make some decisions
});

为什么//将逻辑和//结合起来,做出一些决策并被调用两次?我怎么能让它只发生一次

有相当多的线程详细描述了组合可选的观察对象,但我发现没有一个线程只讨论一次操作


我发现很难找出您想要遵循的所有约束和规则。您能否详细说明具体的用例,提供一些预定义输入的预期输出等。?
A.firstOrError().zipWith(B.take(2, TimeUnit.SECONDS).first(""), (a, b) -> {
    //combine logic
    return aAndMaybeB;
}.observeOn(AndroidSchedulers.mainThread()).subscribe( aAndMaybeB-> {
    //make some decisions
});