我的一些数据存储在Firebase中,就像在下面的屏幕快照中一样,存储在名为“ votes”的父项下:
我试图仅拉取值(-1),但继续获取整个HashMap。
在这种情况下,键在我的代码中表示为名为inititorId
的变量,而postVotesSnapshot表示包含许多子项的父快照,如我所附的屏幕截图所示。
我尝试过:
postVotesSnapshot.child(initiatorId).value
要么
postVotesSnapshot.child(initiatorId).getValue(Integer::class.java)
这两个键都导致我整个HashMap崩溃,因为我需要将该值设为Int。
我尝试过:
val valueHash = postVotesSnapshot.child(initiatorId).getValue(HashMap::class.java)
val myValue = valueHash[initiatorId]
但是那是行不通的。
我不确定问题出在哪里,因为代码在使用我提到的第一个选项之前可以完美地工作,而今天却突然向我抛出错误。
这是完整的侦听器:
val refVotes = if (postType == 0) {
FirebaseDatabase.getInstance().getReference("/questions/$mainPostId/main/votes")
} else {
FirebaseDatabase.getInstance().getReference("/questions/$mainPostId/answers/$specificPostId/votes")
}
refVotes.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {
}
override fun onDataChange(postVotesSnapshot: DataSnapshot) {
setVotesCount(specificPostId, mainPostId, votesView, postType)
if (postVotesSnapshot.hasChild(initiatorId)) {
val voteValue = postVotesSnapshot.child(initiatorId).getValue(Integer::class.java) //this line is the problematic one
//I do stuff
}
}
})
}
答案 0 :(得分:1)
尝试以下操作:
val ref = firebase.child("posts")
ref.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot?) {
val id = dataSnapshot.child(initiatorId).getValue(Integer::class.java)
}
override fun onCancelled(error: FirebaseError?) {
println(error!!.message)
}
})
假设您有以下数据库:
posts
VMQPBq6YK3bJ12xIjGeTHsqaJC2 : -1
此处dataSnapshot将位于子posts
处,然后您需要附加addListenerForSingleValueEvent
并访问子initiatorId
。还要假设InitiatorId等于VMQPBq6YK3bJ12xIjGeTHsqaJC2