当前位置: 首页 > 知识库问答 >
问题:

为什么它不能应用平面图并订阅同一RxBleConnection可观察两次?

盖昊东
2023-03-14

作为标题,

为了简单起见,如果我想用不同的UUID执行两次读取操作:

(我知道RxAndroidBle提供了多重读取功能

Observable<RxBleConnection> ob = device.establishConnection(false);

ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SSID))
        .subscribe(
                characteristicValue -> {
                    //2. then read Successfully here !!!!!
                },
                throwable -> {
                }
        );

ob.flatMap(rxBleConnection -> rxBleConnection.readCharacteristic(CHAR_WIFI_SECURITY_MODE))
        .subscribe(
                characteristicValue -> {     
                },
                throwable -> {
                    //1. I got BleAlreadyConnectedException error first !!!!
                }
        );

为什么second subscribe()得到blealReadyConnectionedException?

=======更新==========

我找到了解决方案,如果我修改

装置建立连接(false)==

ConnectionSharingAdapter将执行如下操作:

SourceObservable.replay(1). refCount();

保持源发射的最后一个可观察

共有1个答案

钮刚洁
2023-03-14

两次订阅同一个可观察的将调用两次订阅逻辑,这在某些情况下可能是多余的,或者像您的情况一样出现故障,您正在建立多个到Ble的连接,这是被禁止的,并且得到了BleAlreadyConnectedException
正如徐院长所指出的,您应该多播您的可观察到的,以防止出现这种情况。(可以使用各种发布/共享操作符)

 类似资料:
  • 我试图理解可观察对象是如何执行的,但似乎无法让这个简单的代码正常工作。 不应该是你好。订阅()执行?

  • 我必须从两个订阅服务器获取数据,但我总是获取第一个订阅服务器的数据。 我有一个数据共享服务: 在离开搜索组件之前,我调用update方法。 现在,我在results组件上。我得到的共享数据如下: 我的问题是:我需要共享数据来订阅另一个可观察的数据。首先,我构造了一个物体乘坐,在我调用搜索方法之后 问题是我总是从数据服务获取数据,而不是从api调用。api工作导致我在存储中拦截结果,而不是在组件中。

  • 本文向大家介绍system.reactive 订阅/取消订阅可观察对象(IDisposable),包括了system.reactive 订阅/取消订阅可观察对象(IDisposable)的使用技巧和注意事项,需要的朋友参考一下 示例 订阅返回IDisposable: 当您准备取消订阅时,只需处置订阅即可:            

  • < li >哪些可观察的方法“订阅”结果?例如,flatMap订阅第一个可观察对象的结果,并在不调用subscribe方法的情况下传递结果。 < li >是否有办法确定可观察的方法(flatMap、mergeMap、forkJoin、concat、subscribe...)返回编译时间,是订阅还是可观察?我经常困惑这些方法的结果是什么。 < Li > rxjs方法是否有这种类型的分类? < li

  • 当我创建5个observables并用单独的订阅者订阅它们时,直觉上我认为每个订阅者都将获得其observables的相应数据,这些数据通过onNext()调用发出: 然而,我在日志中看到的是一两个“testit onnext”。 如果有任何提示,我将不胜感激。

  • 我有这个问题,我一直在寻找,但找不到解决方案(或者也许我不能根据其他答案做出解决方案)。 我的问题是,我需要找到一种方法来等待可观察的(有自己的订户)并等待另一个可观察的(有自己的订户)完成。 场景是这样的: 奥布1- 奥布斯2 - 我主要担心的是我需要两个订阅者。在我看来,obs1 和 obs2 并行运行,但需要检查 obs1 是否以新的会话令牌完成。也许这不是RxJava的主要目的。 Obs1