【发布时间】:2020-02-19 23:51:30
【问题描述】:
我目前正在开发一个应用程序,该应用程序能够记录智能手机传感器,如加速度等,并在 GraphView 库的帮助下绘制它们。目前,我将传感器值读入 Room SQLite 数据库,然后使用观察者在 LiveData 对象的帮助下观察表格,我得到新的测量值并将最后一个新的测量值添加到图中的系列中。这就是我更新图表的方式:
sharedViewModel.allAccelerations.observe(viewLifecycleOwner, Observer<List<MeasurementDatabaseHelper.Measurement>> { measurements ->
if (sharedViewModel.isReset.value == true && measurements.isNotEmpty()) {
val time = (measurements.last().time.toDouble() - measurements.first().time.toDouble())*1e-9
val accX = measurements.last().accX.toDouble()
series.appendData(DataPoint(time, accX), true, 50)
}
然而,我的问题是观察者不会对每个添加的测量做出反应,因此当我将最后一个测量添加到系列时,我会跳过值。我当然可以编写代码来检查每次观察者对 LiveData 更改做出反应时必须添加多少值,但这对我来说似乎不是一个好的选择。有没有人知道如何将数据库中的测量值与 GraphViews 系列同步?
【问题讨论】:
-
我会在应用程序运行时直接更新图形,而不会绕道 Room,并且仅在应用程序重新启动时使用数据库来初始化图形。
标签: android kotlin android-room android-livedata