【发布时间】:2017-12-02 15:25:59
【问题描述】:
我的代码在 firebase 中计算星星(5 颗星) 我有问题,如果它实时更新它计数不正确
(现在是 Firebase)
- = 1
- = 2
- = 0
- = 0
- = 0
在更改 firebase [add 1. +=1]
- = 3
- = 4
- = 0
- = 0
- = 0
但如果我重新启动应用程序,它会变为正常结果:
- = 2
- = 2
- = 0
- = 0
- = 0
为什么 MutableMap 第二次用新星添加地图?
class FireBaseRealTime {
var listofStarsCounter : ArrayList<Int> = ArrayList<Int>(listOf(0,0,0,0,0))
var mDataBase : DatabaseReference = FirebaseDatabase.getInstance().getReference()
var mDeviceLikesRef = mDataBase.child("service").child("devices").child("sam").child("likes")
fun allAverageLike(text: TextView,star1: TextView,star2: TextView,star3: TextView,star4: TextView,star5: TextView) {
var count : Int = 0
var sumAllvalue : Int = 0
mDeviceLikesRef.addValueEventListener(object : ValueEventListener{
override fun onCancelled(p0: DatabaseError?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onDataChange(dataSnapshot: DataSnapshot?) {
dataSnapshot?.children?.forEach { child : DataSnapshot ->
val objectMap : MutableMap<String, Any>
objectMap = child.value as MutableMap<String, Any>
for(entary in objectMap) {
if(entary.key.equals("value")) {
when(entary.value.toString()){
"1" -> listofStarsCounter.set(0, listofStarsCounter.get(0) + 1)
"2" -> listofStarsCounter.set(1, listofStarsCounter.get(1) + 1)
"3" -> listofStarsCounter.set(2, listofStarsCounter.get(2) + 1)
"4" -> listofStarsCounter.set(3, listofStarsCounter.get(3) + 1)
"5" -> listofStarsCounter.set(4, listofStarsCounter.get(4) + 1)
}
count++
sumAllvalue += entary.value.toString().toInt()
}
}
}
try {
text.text = "%.1f".format(sumAllvalue.toDouble() / count.toDouble())
star1.text = "%.1f".format((100.0/count.toDouble()) * listofStarsCounter.get(0).toDouble())
star2.text = "%.1f".format((100.0 / count.toDouble()) * listofStarsCounter.get(1).toDouble())
star3.text = "%.1f".format((100.0 / count.toDouble()) * listofStarsCounter.get(2).toDouble())
star4.text = "%.1f".format((100.0 / count.toDouble()) * listofStarsCounter.get(3).toDouble())
star5.text = "%.1f".format((100.0 / count.toDouble()) * listofStarsCounter.get(4).toDouble())
} catch (e : ArithmeticException) {
}
}
})
}
}
【问题讨论】:
标签: firebase firebase-realtime-database kotlin