Не очень хороший способ сознательно закрыть соединение внутри `onNext` файла ʻInterConnection`, и если соединение потеряно, возникают только ошибки - PullRequest
0 голосов
/ 26 марта 2019

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

scanResult.bleDevice.establishConnection(false).flatMapCompletable { connection ->
        connection.writeCharacteristic(UUID, "reboot".toByteArray(Charset.defaultCharset())).ignoreElement()
}

Первоначальное установление соединения никогда не завершается должным образом, возвращается только ошибка, которая была отключена устройством, которая при наличии всех других видов кода для обработки неправильных разъединений становится трудной. Если я пытаюсь избавиться от соединения во время onComplete из writeCharacteristic Кажется, я никогда не получаю правильный обратный вызов. Я не уверен, что есть какой-то конкретный bug с этим, но, скорее, я ищу понимание того, как правильно

1 Ответ

1 голос
/ 27 марта 2019

Вопрос больше связан с использованием RxJava 2, чем с библиотекой.Чтобы решить вашу проблему, вам нужно сначала сохранить подписку на .establishConnection() до тех пор, пока она не сгенерируется, и не произойдет последующая запись.Код может выглядеть так:

scanResult.bleDevice.establishConnection(false) // establish the connection
    .publish { connectionObs ->
        // it will be needed to be subscribed until something will happen on it so a need to publish
        connectionObs.takeUntil( // keep the connection subscribed until...
            connectionObs.flatMapSingle {
                // ...the first write will complete
                it.writeCharacteristic(
                    uuid,
                    "reboot".toByteArray(Charset.defaultCharset())
                )
            }
        )
    }
    .ignoreElements()
...