我正在开发一个服务器端应用程序,使用Kotlin来管理Firebase中的Web客户列表。我已成功将Java Firebase Admin SDK添加到我的Kotlin,并与我的实时数据库建立了功能性连接。Kotlin的Firebase SDK - onChildChanged没有对名单中的第一个孩子开火
但是,我只注意到一个问题。我添加了一个ChildEventListener来监听他们的数据变化,并且它对每个客户都很好,除了列表中的第一个客户外。无论我订购数据还是订购数据为“orderBy”,第一个查询项目在数据库中实际编辑时都不会收到ChildChanged回调。
var ref=FirebaseDatabase.getInstance().getReference("web-
customers").orderByChild("displayName")
ref.addChildEventListener(object:ChildEventListener{
override fun onCancelled(p0: DatabaseError?) {
if(p0!=null)
println(p0.message)
}
override fun onChildMoved(p0: DataSnapshot?, p1: String?) {
println("A child moved !!!!!!!!!!!!!!!!!!")
}
override fun onChildChanged(p0: DataSnapshot, p1: String) {
println("A child changed !!!!!!!!!!!!!!!!!!")
val key=p0.key as String
println("A customer changed: "+key)
for(value:HashMap<String,Any> in list){
println(value.get(".key") as String+": "+value.get("displayName") as String)
if((value.get(".key") as String).equals(key)){
val valor=p0.value as HashMap<String,Any>
for(llave in valor.keys){
val dato=valor.get(llave) as Any
value.put(llave,dato)
}
println("Customer "+valor.get("displayName") as String+" modified!!!!!!")
refresh()
break
}
}
}
override fun onChildAdded(p0: DataSnapshot, p1: String?) {
println("A child added !!!!!!!!!!!!!!!!!!")
val value=p0.value as HashMap<String,Any>
value.put(".key",p0.key as String)
list.add(value)
}
override fun onChildRemoved(p0: DataSnapshot?) {
println("A child removed !!!!!!!!!!!!!!!!!!")
}
})
我想可能会有一些问题,在我的客户的数据,所以它崩溃,甚至没有抛出异常,但增加了对检查ChildChanged回调单一的println被解雇后,甚至,它不会做与列表中的第一个客户的东西!
我在过去为Java(没有Kotlin)做过类似的代码,它们一直很棒。
我正在使用最新的Firebase Java SDK版本5.2.0。
有没有人遇到类似的错误?
对不起,你看,我的previousChildName都称为P1,并检查我的代码后两次我不知道我在哪里使用它。我总是只调用p0,这是DataSnapshot。 请你指点一下你正在谈论的确切线路? – Olmectron
有点晚了,但弄清楚了。请看我更新的答案。 –