0

我正在使用 RxAndroidBLE 库来发现我的 GATT 服务器中的服务。它大部分时间都可以正常工作,但我经常收到 GATT 错误 133 (0x85) 并且它失败了。我想在一段时间内重试几次发现服务,比如 5 秒。这是我正在尝试的代码

bleDevice = mBleClient.getBleDevice(macAddress);
    subscription =  bleDevice.establishConnection(false)
            .flatMap(RxBleConnection::discoverServices)
            .first() // Disconnect automatically after discovery
            .observeOn(AndroidSchedulers.mainThread())
            .doOnUnsubscribe(this::onUnsubscribe)
            .compose(this.bindToLifecycle())
            .retryWhen(errors -> errors.flatMap(error -> {
                        if (isGattError(error) {
                            return Observable.just(new Object());
                        } else {
                            return Observable.error(error);
                        }
                    }
            ))
            .timeout(5, TimeUnit.SECONDS)
            .subscribe(this::getScanResult, this::onConnectionFailure);

它不起作用,看起来 retryWhen 没有被调用。它可能更多是 rxJava 问题,但我将非常感谢您对此的任何帮助。

4

1 回答 1

1

正如您在评论中所写,您this::onUnsubscribe正在调用subscription.unsubscribe(),因此.retryWhen()操作员不可能被调用。

您可以移动.doOnUnsubscribe()下面的.retryWhen()或相反的方式来获得预期的行为。

于 2017-08-11T11:02:31.297 回答