首页 > 解决方案 > RxAndroidBle - 我可以使用单个命令将可变数量的写入组合到特征吗?

问题描述

我有一个数组,其中包含需要写入同一特征的多条数据,但我希望在整个过程完成时收到通知。

我可以通过循环遍历我的数组来完成写入,如下所示:

byte[][] dataArray = getDataArray();
for (byte[] values: dataArray) {
    rxBleConnection.writeCharacteristic(CHARACTERISTIC_UUID, values)
        .subscribe(bytes -> {
            // here I am notified after each individual write
        }, throwable -> {
            // handle error per write
        });
}

但是,这种方法很慢,我无法检测到整个写入过程何时完成。有没有办法以某种方式将写入组合在一起,以便我可以监听整个写入事务的完成?

我不能使用Observable.merge,因为dataArray可能有可变大小和超过 9 个元素。

标签: androidrx-androidrxandroidble

解决方案


有没有办法以某种方式将写入组合在一起,以便我可以监听整个写入事务的完成?

是的,有办法。您可以将 转换byte[][]Observable<byte[]>将在 中处理的排放.flatMap()。然后你只需要等待链的完成。IE:

Observable.from(Arrays.asList(getDataArray()))
    .flatMap(values -> rxBleConnection.writeCharacteristic(CHARACTERISTIC_UUID, values))
    .ignoreElements() // transform to a `Completable` as you are interested only in the completion
    .subscribe(
        () -> { /* all values have been successfully written */ },
        throwable -> { /* an error happened during one of the writes */ }
    );

推荐阅读