首页 > 解决方案 > RxJava observables 之间的动态切换

问题描述

我有两个 observables:一个发出从蓝牙连接接收到的 ByteArrays,另一个发出周期性服务器请求的结果。

fun observeBluetooth():Observable<ByteArray>
fun observeServer():Observable<ByteArray>

蓝牙连接状态可用(作为布尔变量或 Observable)

我需要考虑以下要求来组合观察值:

  1. 如果蓝牙已连接,则必须发出从 observeBluetooth() 接收的数据(并且不得发出服务器请求)
  2. 如果蓝牙未连接,则必须发出从 observeServer() 接收的数据
  3. 如果蓝牙连接恢复,则必须再次发出从 observeBluetooth() 接收到的数据

如何使用 RxJava/Kotlin 做到这一点?

标签: kotlinrx-javareactive-programming

解决方案


如果你有一个 observable isBtConnected,你可以切换它:

val isBtConnected: Observable<Boolean> = ...
isBtConnected.switchMap {
    if (it) observeBluetooth()
    else observeServer()
}

推荐阅读