Kotlin我如何在MPAndroidChart中使用实时数据库



我试图在图表中使用实时数据库,但似乎无法将数据库中的值转换为浮点值。

下面的代码是我如何设置图形的。

碎片.kt

private fun setBarChart() {
databaseReference?.addValueEventListener(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {

val testMon = snapshot.child("user_data/most_recent_per_day/Mon").value.toString().toFloat()
val entries = ArrayList<BarEntry>()
entries.add(BarEntry(test, 0))
entries.add(BarEntry(10f, 1))
entries.add(BarEntry(5f, 2))
entries.add(BarEntry(20f, 3))
entries.add(BarEntry(15f, 4))
entries.add(BarEntry(19f, 5))
entries.add(BarEntry(19f, 6))
val barDataSet = BarDataSet(entries, "Cells")
val labels = ArrayList<String>()
labels.add("Mon")
labels.add("Tue")
labels.add("Wed")
labels.add("Thu")
labels.add("Fri")
labels.add("Sat")
labels.add("Sun")
val data = BarData(labels, barDataSet)
barChart.data = data // set the data and list of lables into chart
barChart.setDescription("Set Bar Chart Description")  // set the description
//barDataSet.setColors(ColorTemplate.COLORFUL_COLORS)
barDataSet.color = resources.getColor(R.color.colorAccent)
barChart.animateY(5000)
}

当我将图的值设置为testMon = snapshot.child("user_data/most_recent_per_day/Mon").value.toString().toFloat()时,它会给出一个numException。BarEntry((只接受Float作为第一个参数。

下面是日志。

java.lang.NumberFormatException: For input string: "null"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at com.fitnessproject.fragments.StatsFragment$setBarChart$1.onDataChange(StatsFragment.kt:66)

知道如何正确地将我的数据库值转换为Float吗?

我不明白为什么它会给出一个错误,因为它要求一个Float,而我正在将数据库值转换为Float。那么抛出numException的实际原因是什么呢??

我能够通过在创建Mon值之前运行应用程序来复制这个问题

在已设置Mon的情况下重新运行应用程序时仍然会发生错误,这似乎是因为Mon的值被缓存为null。

这也可能是因为user_data/most_recent_per_day/Mon不存在。

我找到了两种方法来解决你的问题,你可以更新Mon的值,也可以清除应用程序存储,这两种方法都对我有效。

此外,在尝试转换为浮点之前,请考虑添加完整性检查,如果您将文本添加到Mon,它将使您的应用崩溃

最新更新