【发布时间】:2021-01-27 00:28:35
【问题描述】:
我正在创建一个应用程序以通过蓝牙与外部设备进行通信,该连接使用串行协议 (rfcomm)。幸运的是,我在 GitHub 上找到了一个名为 BlueFlow 的好库,完全用 Kotlin 和协程编写。我想实现 android dev 门户中建议的 MVVM 模式,但我不知道哪个是蓝牙的正确角色。
我有一个基本活动和一个片段,我想在其中管理 ui 组件,并且我想使用数据绑定更新 ui 的文本字段。 我想我需要在 LiveData 类型的 ViewModel 中创建一个变量,并在片段中观察它以进行更改。
蓝牙库有一个我在 ViewModel 中实例化的单例类,我需要向它传递一个上下文。蓝牙类有一个读取传入数据“readByteArray”的函数,它返回一个Flow<ByteArray>。我想这是 MVVM 架构中的“远程数据源”,对吗?然后我需要在它之上构建一个存储库。这是第一个绊脚石,我如何在这里使用函数 readByteArray ?我不能在不传递上下文的情况下使用单例,我认为在这部分架构中使用上下文并不好。
我还为接收到的数据编写了一个模型类,就像:
@Parcelize
data class IncomingResult(
@SerializedName("battery")
val battery: Int,
@SerializedName("sensor_one")
val sensorOne: Int,
@SerializedName("sensor_two")
val sensorTwo: Int,
): Parcelable
我需要这个类,因为有时我必须将这些数据保存到房间数据库中。
我非常感谢任何帮助/建议。我从一个星期以来一直在努力解决这个问题,但没有找到解决方案。这就是我认为应该在我的项目中实现 MVVM 的方式,但我不确定它是否正确:
Fragment
|
|
ViewModel
|
|
Repository
|
__________ | _________
| |
| |
Room Database Bluetooth
incoming data
【问题讨论】:
标签: android kotlin bluetooth kotlin-coroutines