RxAndroidBle читать, а затем записать в характеристику - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь прочитать из характеристики c, а затем написать по той же характеристике c, но не смог понять, как. В качестве первого шага я пытался сделать несколько записей, следуя этому примеру :

connectionDisposable =
                connectionObservable.flatMap(rxBleConnection -> {
                    return rxBleConnection.writeCharacteristic(SSID, bytes)
                            .flatMap(ssidBytes -> rxBleConnection.writeCharacteristic(SSID, bytes)
                                    .flatMap(ssid2Bytes -> rxBleConnection.writeCharacteristic(SSID, bytes)));
                })
                        .subscribe(ssid3Bytes -> {
                            //do something
                        }, this::onError, this::onComplete);

Но я получаю следующую ошибку:

no instance(s) of type variable(s) R exist so that Single<R> conforms to ObservableSource<? extends R>

было бы здорово, если бы кто-нибудь мог помочь мне понять, как сделать больше, чем просто одно чтение или одну запись, используя RxAndroidBle.

1 Ответ

0 голосов
/ 09 апреля 2020

Проблема, которую вы наблюдаете, заключается в том, что в примере используется Rx Java 1, а текущая версия RxAndroidBle основана на Rx Java 2. Во время перехода некоторые API изменились с Observable<byte[]> на Single<byte[]>.

Плоское отображение Observable на Single не может быть выполнено с помощью оператора .flatMap(), но требуется .flatMapSingle().

Кроме этого - если вас не интересуют какие данные вы написал тогда более простой (на мой взгляд, по крайней мере) альтернативный вариант:

Completable writeMultipleCharacteristics(RxBleConnection rxBleConnection) {
    return Completable.concatArray(
        rxBleConnection.writeCharacteristic(SSID, bytes).ignoreElement(),
        rxBleConnection.writeCharacteristic(SSID, bytes).ignoreElement(),
        rxBleConnection.writeCharacteristic(SSID, bytes).ignoreElement()
    );
}

PS Я обновил пример , который вы упомянули с кодом Rx Java 2.

...