作为标题,
为简单起见,如果我想用不同 UUID执行两次读取操作:
(我知道RxAndroidBle提供了多重读取功能)
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 !!!!
}
);
为什么第二个subscribe()得到BleAlreadyConnectedException?
==========更新==========
我找到了解决方案, 如果我修改
device.establishConnection(false)==&gt; device.establishConnection(false).compose(new ConnectionSharingAdapter())
ConnectionSharingAdapter将执行以下操作:
sourceObservable.replay(1).refCount();
保持源可观察的最后一个发射
答案 0 :(得分:0)
两次订阅相同的Observable
将调用两次订阅逻辑,这在某些情况下可能是多余的,或者像您的情况一样有问题,在这种情况下,您建立了与Ble禁用并获得{{1}的Ble的多个连接}。
正如徐院长指出的那样,你应该多播你的BleAlreadyConnectedException
以防止这种情况发生。 (您可以使用各种发布/共享运算符)