RxAndroidBle - Можно ли объединить переменное число записей в характеристику с помощью одной команды? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть массив, содержащий несколько фрагментов данных, которые необходимо записать в одну и ту же характеристику, но я хочу получать уведомления о завершении всего процесса.

Я могу выполнить запись, циклически перебираямассив следующим образом:

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 элементов.

1 Ответ

0 голосов
/ 11 сентября 2018

Есть ли способ как-то объединить записи, чтобы я мог прослушивать завершение всей транзакции записи?

Да, есть способ.Вы можете преобразовать byte[][] в Observable<byte[]>, выбросы которого будут обработаны в .flatMap().Тогда вам просто нужно дождаться завершения цепочки.т.е.:

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 */ }
    );
...