在 establishConnection 的 onNext 中故意关闭连接不是一个好方法,如果连接丢失,只会发生错误
Not a good way to knowingly close a connection within the `onNext` of `establishConnection` and if connection is lost, only errors occur
如果我正在编写将重启设备的功能,我 运行 会陷入麻烦的世界。例如。
scanResult.bleDevice.establishConnection(false).flatMapCompletable { connection ->
connection.writeCharacteristic(UUID, "reboot".toByteArray(Charset.defaultCharset())).ignoreElement()
}
最初的建立连接从未正确完成,只有 returns 设备已断开连接的错误,加上所有其他类型的代码来处理不正确的断开连接,这个变成了 difficult.If我尝试在 writeCharacteristic
的 onComplete
期间处理连接 我似乎从未得到适当的回调。我不确定这是否有任何特定的 bug
,而是我正在寻找如何正确
这个问题更多地与 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()
如果我正在编写将重启设备的功能,我 运行 会陷入麻烦的世界。例如。
scanResult.bleDevice.establishConnection(false).flatMapCompletable { connection ->
connection.writeCharacteristic(UUID, "reboot".toByteArray(Charset.defaultCharset())).ignoreElement()
}
最初的建立连接从未正确完成,只有 returns 设备已断开连接的错误,加上所有其他类型的代码来处理不正确的断开连接,这个变成了 difficult.If我尝试在 writeCharacteristic
的 onComplete
期间处理连接 我似乎从未得到适当的回调。我不确定这是否有任何特定的 bug
,而是我正在寻找如何正确
这个问题更多地与 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()