Нет данных уведомления в настройке записи / уведомления
После того, как я приложил все усилия, чтобы понять всю магию в RxJava и отличную библиотеку rxandrodible, я застрял! Последнее, что мне нужно исправить, это настроить ссылку записи / уведомления, в которой я записываю значение - одно значение - и после этого подписываюсь на определенную характеристику.
Я использовал следующий код - как считается наилучшей практикой (?) - но на самом деле он не приводит к каким-либо данным на soundTV.
connectionSubscription = device.establishConnection(false)
.flatMap( // when the connection is available...
rxBleConnection -> rxBleConnection.setupNotification(RX_CHAR_UUID), // ... setup the notification...
(rxBleConnection, apScanDataNotificationObservable) -> Observable.combineLatest( // ... when the notification is setup...
rxBleConnection.writeCharacteristic(TX_CHAR_UUID, new byte[]{SOUND}).toObservable(), // ... write the characteristic...
apScanDataNotificationObservable.take(1),// ... and observe for the first notification on the AP_SCAN_DATA
(writtenBytes, responseBytes) -> responseBytes // ... when both will appear return just the response bytes...
)
)
.flatMap(observable -> observable) // ... flatMap the result as it is Observable<byte[]>...// ... and finish after first response is received to cleanup notifications
.take(1)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
responseBytes -> {
soundTV.setText(new String(responseBytes));
},
throwable -> {
soundTV.setText(throwable.toString());}
);
Нет данных, записанных по подписке на TextView, и я не могу найти ничего плохого.
Если я просто настрою уведомления, не совмещая их с записью, все работает как надо.
Любые предложения о том, как заставить это работать?
Используемый пример кода дает только один ответ. То, что я искал, было записью и подпиской, которая продолжалась. Я не осознавал, что вызов take(1) на самом деле имел значение, думал, что это очистка в сложной структуре вызовов.
Сожалею! Это работает как предназначено для меня:
connectionSubscription = device.establishConnection(false)
.flatMap( // when the connection is available...
rxBleConnection -> rxBleConnection.setupNotification(RX_CHAR_UUID), // ... setup the notification...
(rxBleConnection, apScanDataNotificationObservable) -> Observable.combineLatest( // ... when the notification is setup...
rxBleConnection.writeCharacteristic(TX_CHAR_UUID, new byte[]{SOUND}).toObservable(), // ... write the characteristic...
apScanDataNotificationObservable,// ... and observe for the first notification on the AP_SCAN_DATA
(writtenBytes, responseBytes) -> responseBytes // ... when both will appear return just the response bytes...
)
)
.flatMap(observable -> observable) // ... flatMap the result as it is Observable<byte[]>...// ... and finish after first response is received to cleanup notifications
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
responseBytes -> {
soundTV.setText(new String(responseBytes));
},
throwable -> {
soundTV.setText(throwable.toString());}
);