私はFirebaseのWeb顧客のリストを管理するためにKotlinを使ってサーバー側のアプリケーションを開発しています。私は正常にJava Firebase Admin SDKをKotlinに追加し、Realtime Databaseとの機能的な接続を得ました。KotlinのFirebase SDK - onChildChangedがリストの最初の子に発砲しない
しかし、私はちょうど1つの問題に気づいた。私は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と呼ばれ、二回私のコードをチェックした後、私はどこでそれを使ったのかわかりません。私は常にDataSnapshotであるp0だけを呼び出しています。 あなたが話している正確なラインを教えてください。 – Olmectron
ちょっと遅いですが、それを理解してください。私の更新された答えを見てください。 –