【问题标题】:Write/Notification handling with rxandroidble使用 rxandroidble 进行写入/通知处理
【发布时间】:2018-04-19 13:05:38
【问题描述】:

我正在尝试实现这个写入/通知处理示例 (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 中的 first(byte[]) 不能应用于 ()”。所以我不知道我应该将什么参数传递给第一种方法。

【问题讨论】:

    标签: java android rx-java2 rxandroidble


    【解决方案1】:

    您收到此错误的原因是因为原始答案是为RxAndroidBleRxJava1 版本提供的,并且您至少在上述示例中使用的是RxJava2

    RxJava1RxJava2 之间,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(),
    

    【讨论】:

    • 感谢您的回复,我已经尝试过了,然后所有 args 插入 combineLatest 然后有一条红线,显示消息“无法解析方法 io.reactivex.Single, io .reactivex.Observable, 匿名 io.reactivex.functions.BiFunction)'
    • 在上面添加了一点答案。
    • 非常感谢,只需要更改其他第一种方法采取(1)。它有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2021-10-27
    • 1970-01-01
    相关资源
    最近更新 更多