Как я могу получить целое число из SingleFlatMap в RxJava? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь получить значение с устройства Bluetooth.

if (rxBleDevice.connectionState != RxBleConnection.RxBleConnectionState.CONNECTED) {
 rxBleDevice!!.establishConnection(false) ? .subscribe({
  rxBleConnection ->

  Log.d("Device: ", "Connection Established")

  val stringDeviceUUID = rxBleDevice.bluetoothDevice.uuids[0].toString()
  val charUUID = UUID.nameUUIDFromBytes(stringDeviceUUID.toByteArray())

  val count = rxBleConnection.readCharacteristic(charUUID)

  println("OUTPUT: ${count}")

 }, {
  throwable -> Log.d("Device: ", "$throwable")
 })
}

Я использую следующие зависимости, в основном RxJava и реактивную библиотеку Bluetooth RxAndroidBLE:

implementation 'io.reactivex.rxjava2:rxkotlin:2.1.0'
implementation "com.polidea.rxandroidble2:rxandroidble:1.8.1"
implementation "io.reactivex.rxjava2:rxjava:2.2.7"

Мой вывод:

I/System.out: OUTPUT: io.reactivex.internal.operators.single.SingleFlatMap@bf9162d

Я не знаю, как обрабатывать этот объект. Я считаю, что должен получить простой ByteArray от устройства Bluetooth.

Примером значения, которое я должен увидеть, является datc00099, указывающее счет 99.

1 Ответ

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

Вы должны подписаться на Single. Следуя примерам, предоставленным RxAndroidBle , что-то подобное может работать в вашем случае:

if (rxBleDevice.connectionState != RxBleConnection.RxBleConnectionState.CONNECTED) {

 // Have your charUUID ready. Might need extra null checks for rxBleDevice
 val charUUID = rxBleDevice.bluetoothDevice.uuids[0].uuid

 rxBleDevice!!.establishConnection(false) ?
  .doOnNext {
   _ -> Log.d("Device: ", "Connection Established")
  } ?
  .flatMapSingle {
   rxBleConnection -> rxBleConnection.readCharacteristic(charUUID)
  } ? .subscribe({
   count ->
   // count should be in bytes
   println("OUTPUT: $count")

  }, {
   throwable ->
   Log.d("ERROR: ", "$throwable")
  })

}
...