android - 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 个元素。
解决方案
有没有办法以某种方式将写入组合在一起,以便我可以监听整个写入事务的完成?
是的,有办法。您可以将 转换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 */ }
);
推荐阅读
- angular - 过滤器关键字的ngModel更改未触发异步数组上的过滤器管道
- javascript - Momenjs 格式化程序将时间从 00 更改为 03 小时
- docusignapi - DocuSign 普通账户和开发者账户有何不同?
- docker - 为什么 wc -l 在 Jenkins/groovy 的 sh 步骤子外壳中返回 0
- javascript - 当用户在特定元素之外单击时使用 *ngIf 隐藏 HTML 元素 (Angular)
- vue.js - 具有 v-if 的元素未按预期更新
- python - Python中不同数据类型的大小
- r - 将 R read_fwf 应用于文件列表
- python - Python删除2个CSV文件的第一行并将它们保存在同一个文件中
- gstreamer - 无法链接 Gstreamer 元素