使用rxandroidble进行写入/通知处理

时间:2018-04-19 13:05:38

标签: rxandroidble

我正在尝试实现写/通知处理的示例(Using RxAndroidBle, how do I subscribe to responses from writing to a characteristic?)。

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()的编译时错误。它说“Observable中的第一个(byte [])不能应用于()”。所以我不知道我应该传递给第一种方法的论点。

1 个答案:

答案 0 :(得分:1)

您收到此错误的原因是因为原始答案是针对RxJava1的{​​{1}}版本提供的,并且您至少在上面的示例中使用了RxAndroidBle

RxJava2RxJava1之间,方法RxJava2改变了签名和实现。 Observable.first()的等效函数为RxJava2

您应该更改此行:

Observable.take(int count)

对此:

apScanDataNotificationObservable.first(),

此外,apScanDataNotificationObservable.take(1), 接受两个Observable.combineLatest()参数,其中ObservablerxBleConnection.writeCharacteristic()。你应该改变这一行:

Single

对此:

rxBleConnection.writeCharacteristic(RX_CHAR_UUID, getInputBytes()),