Нет данных уведомления в настройке записи / уведомления

После того, как я приложил все усилия, чтобы понять всю магию в 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());}
                    ); 

0 ответов

Другие вопросы по тегам