Запись / обработка уведомлений с помощью rxandroidble

Я пытаюсь реализовать этот пример обработки записи / уведомления (Используя RxAndroidBle, как мне подписаться на ответы при написании характеристики?).

connectionObservable
                    .flatMap((Function<RxBleConnection, Observable<Observable<byte[]>>>)
                            (RxBleConnection rxBleConnection) -> {
                                return rxBleConnection.setupNotification(TX_CHAR_UUID);
                            },
                            (BiFunction<RxBleConnection, Observable<byte[]>, Observable<byte[]>>)
                                    (rxBleConnection, apScanDataNotificationObservable) -> {
                                        return Observable.combineLatest(
                                                rxBleConnection.writeCharacteristic(RX_CHAR_UUID, getInputBytes()),
                                                apScanDataNotificationObservable.first(),
                                                new BiFunction<byte[], byte[], byte[]>() {
                                                    @Override
                                                    public byte[] apply(byte[] writtenBytes, byte[] responseBytes) throws Exception {
                                                        return responseBytes;
                                                    }
                                                }
                                        );
                                    }
                    ).flatMap(new Function<Observable<byte[]>, Observable<byte[]>>() {
                @Override
                public Observable<byte[]> apply(Observable<byte[]> observable) throws Exception {
                    return observable;
                }

            })
                    .first()
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe(new Consumer<byte[]>() {
                        @Override
                        public void accept(byte[] bytes) throws Exception {
                            Log.i("Ivan1", "notification response...." + bytes.toString());
                        }

                    }, new Consumer<Throwable>() {
                        @Override
                        public void accept(Throwable throwable) throws Exception {
                            Log.i("Ivan", "notification response...." + throwable.toString());

                        }

                    });

Я пытался писать с помощью rxjava1 и rxjava2, но в обоих случаях я получил ошибку времени компиляции для apScanDataNotificationObservable.first (). Он говорит: «first (byte []) в Observable не может быть применен к ()». Поэтому я не знаю, какой аргумент передать первому методу.


person kosancicivan    schedule 19.04.2018    source источник


Ответы (1)


Причина, по которой вы получаете эту ошибку, заключается в том, что исходный ответ был предоставлен для RxJava1 версии RxAndroidBle, и вы используете RxJava2, по крайней мере, в приведенном выше примере.

Между RxJava1 и RxJava2 метод Observable.first() изменил подпись и реализацию. Эквивалентная функция для RxJava2 Observable.take(int count)

Вам следует изменить эту строку:

apScanDataNotificationObservable.first(),

К этому:

apScanDataNotificationObservable.take(1),

Кроме того, Observable.combineLatest() принимает два параметра Observable, где rxBleConnection.writeCharacteristic() - это Single. Вам следует изменить эту строку:

rxBleConnection.writeCharacteristic(RX_CHAR_UUID, getInputBytes()),

К этому:

rxBleConnection.writeCharacteristic(RX_CHAR_UUID, getInputBytes()).toObservable(),
person Dariusz Seweryn    schedule 19.04.2018
comment
Спасибо за ответ, я уже пробовал это, а затем все аргументы, содержащиеся в CombineLatest, имеют красную строку с сообщением «не удается разрешить метод io.reactivex.Single‹ byte [] ›, io.reactivex.Observable‹ byte [] ›, Анонимный io.reactivex.functions.BiFunction‹ byte [], byte [], byte [] ›) ' - person kosancicivan; 19.04.2018
comment
Добавил немного ответа выше. - person Dariusz Seweryn; 20.04.2018
comment
Большое спасибо, просто нужно было изменить другой первый метод take (1). Оно работает - person kosancicivan; 20.04.2018