Rx java 为什么可以';它不应用flatmap并订阅同一个RxBleConnection可观察两次吗?
作为标题 为简单起见,如果我想使用不同的UUID执行两次读取操作: (我知道RxAndroidBle提供了多重读取功能)Rx java 为什么可以';它不应用flatmap并订阅同一个RxBleConnection可观察两次吗?,rx-java,rx-android,rxandroidble,Rx Java,Rx Android,Rxandroidble,作为标题 为简单起见,如果我想使用不同的UUID执行两次读取操作: (我知道RxAndroidBle提供了多重读取功能) ob=设备连接(假); ob.flatMap(rxBleConnection->rxBleConnection.readCharacteristic(CHAR\u WIFI\u SSID)) .订阅( 特征值->{ //2.然后在这里成功阅读!!!!! }, 可丢弃->{ } ); ob.flatMap(rxBleConnection->rxBleConnection.rea
ob=设备连接(假);
ob.flatMap(rxBleConnection->rxBleConnection.readCharacteristic(CHAR\u WIFI\u SSID))
.订阅(
特征值->{
//2.然后在这里成功阅读!!!!!
},
可丢弃->{
}
);
ob.flatMap(rxBleConnection->rxBleConnection.readCharacteristic(CHAR\u WIFI\u SECURITY\u MODE))
.订阅(
特征值->{
},
可丢弃->{
//1.我首先得到了BleAlreadyConnectedException错误!!!!
}
);
为什么第二个subscribe()会得到blealReadyConnectionedException
==========更新==========
我找到了解决办法,
如果我修改
设备连接(错误)==>
device.establishConnection(false).compose(新连接共享适配器())
ConnectionShareingAdapter将执行以下操作:
sourceObservable.replay(1.refCount()
保持源发出的最后一个可观察订阅两次相同的
可观察
将调用订阅逻辑两次,这在某些情况下可能是冗余的,或者像您的情况一样出现故障,您正在建立多个到Ble的连接,这是被禁止的,并且得到了blalReadyConnectionException
正如徐院长指出的,你应该多播你的
可观察的,以防止这种情况发生。(您可以使用各种发布/共享操作符)我不知道rxandroidble。但是我想你想要的是可观察的。分享。我想我找到了问题所在。这是令人沮丧的连接异常…也许我必须改变我的问题。。。因为我读了不同的UUID,所以有两个不同的主题。事实并非如此:同一主题和多个观察者我不确定我是否理解您的意思,但问题是多个设备。建立连接,您可以读取2个不同的UUID,它只是连接本身,无法创建两次,因此您需要多播连接,然后从同一个连接创建两个独立的主题。我只调用了一次device.establishConnection(),所以我不知道为什么会出现这种异常…看来您在编辑时对答案应用了解决方案,无论如何,device.establishConnection()
只是创建了可观察对象,而没有执行实际的连接,订阅时,执行可观察订阅逻辑,订阅两次,执行两次感谢您的解释,我还做了一些测试,ob=buildConnection(false).publish(),后跟ob.connect(),然后调用两次ob.flatMap().subscribe(),没问题,没有任何错误。。。
Observable<RxBleConnection> ob = device.establishConnection(false);
ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SSID))
.subscribe(
characteristicValue -> {
//2. then read Successfully here !!!!!
},
throwable -> {
}
);
ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SECURITY_MODE))
.subscribe(
characteristicValue -> {
},
throwable -> {
//1. I got BleAlreadyConnectedException error first !!!!
}
);