为什么它不能应用 flatmap 并订阅同一个 RxBleConnection observable 两次?
Why can't it apply flatmap and subscribe on the same RxBleConnection observable twice?
如题,
为简单起见,如果我想使用 不同 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(假)==>
device.establishConnection(false).compose(new ConnectionSharingAdapter())
ConnectionSharingAdapter 会做这样的事情:
sourceObservable.replay(1).refCount();
保持源可观察到的最后一个发射
对同一个 Observable
订阅两次将调用订阅逻辑两次,这在某些情况下可能是多余的,或者像您的情况一样有问题,您正在建立到 Ble 的多个连接,这是被禁止的并得到了 BleAlreadyConnectedException
.
正如徐院长所指出的,你应该多播你的 Observable
来防止这种情况发生。 (您可以使用各种 publish/share 运算符)
如题,
为简单起见,如果我想使用 不同 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(假)==> device.establishConnection(false).compose(new ConnectionSharingAdapter())
ConnectionSharingAdapter 会做这样的事情:
sourceObservable.replay(1).refCount();
保持源可观察到的最后一个发射
对同一个 Observable
订阅两次将调用订阅逻辑两次,这在某些情况下可能是多余的,或者像您的情况一样有问题,您正在建立到 Ble 的多个连接,这是被禁止的并得到了 BleAlreadyConnectedException
.
正如徐院长所指出的,你应该多播你的 Observable
来防止这种情况发生。 (您可以使用各种 publish/share 运算符)