android - 更新房间数据库中的数据并更新视图后 BLE 连接突然失败
问题描述
我有一个最小 SDK 19 的 android 应用程序,看看我的场景:
- 点击按钮;
- BLE 扫描回调扫描 BLE 设备,如果它找到特定设备(我有特殊的 MAC 地址,发送给我;3.返回的对象有 ScannedBleDevice 类型,我得到它并运行 mGattCallback.connect(...);
- 我完美连接到设备,onConnectionStateChanged 等于 SUCCESS;
- 我写了一个特征然后读另一个;
- 我根据从 ble 设备接收到的数据更新 Room 数据库表;
- 活动视图上的 imageviews 和 textviews 同时更新,因为我在房间数据表上使用 livedata 类型;
- 正是在更新视图之后,我从 BLE 设备断开连接而没有收到任何 onConnectionStateChange 回调。
为什么?我不知道。请帮助我......我在这些链接中找到了一些东西,但不完全是我想要的:
解决方案
最后我找到了解决方案:我使用 MVVM 架构。当我的活动创建时,我从数据库中读取数据类型并在其上设置一个观察者。然后将数据设置为viewpager的适配器,并为每个数据行添加一个片段到viewpager;所以在我的一个片段中,我尝试连接到 ble 设备并且连接设置良好。立即从 ble 设备读取数据并保存在数据库中,因此将调用数据观察者,并且 viewpager 将新片段设置为查看,并且所有片段中的所有最后一个对象都永远消失了,所以对 ble 类的回调消失了,我失去了连接。我在第一次读取时将标志设置为真,在更改数据后我不读取。
推荐阅读
- rust - 我可以在不手动实现序列化或反序列化的情况下序列化字段子集并使用函数反序列化其他字段吗?
- c++ - 传递给类时 c_str() 和字符串的奇怪行为
- python - 如何编辑python字典中可变的键
- python - 通过其方法或属性找到一个类对象。可以做到吗?
- javascript - 一起调试节点和客户端 Javascript
- javascript - 使用引导程序在表中显示数据
- java - MongoDB:java.lang.IllegalStateException:状态应该是:来自同一个 MongoClient 的 ClientSession
- angular - 错误:无法解析 ActivatedRoute 的所有参数:(?, ?, ?, ?, ?, ?, ?, ?)
- sql - 由于 In 运算符提供的值,SQL 查询在 JSON_MODIFY 中选择不同的行结果
- windows - 如何将 exe 安装到 docker 容器中?