我正在使用addChildEventListener
作为聊天应用程序
Query chatRoot = Qref
.child("Messages")
.orderByChild("lobbykey")
.equalTo(lobbykey);`
这是我正在使用的查询,据我所知,它的工作原理不错 我正在尝试做的。我还有一个构造函数类,用于放置对象:
public ChatParameters(String userUID, String message, String imageURL, String sender, String lobbykey, String msgkey) {
this.UserUID = userUID;
this.sender = sender;
this.message = message;
this.imageURL = imageURL;
this.lobbykey = lobbykey;
this.msgkey = msgkey;
}
onchildapped侦听器工作正常。当我只用Toast尝试时,它会使文本工作正常。但是当我添加Chatparameters.class以获取所有值时,它就会崩溃
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for (DataSnapshot chatSnapshot: dataSnapshot.getChildren()){
ChatParameters chatParameters = chat.getValue(ChatParameters.class); //i get the error here.
}
}
这是错误logcat,它指的是ChatParameters chatParameters = chat.getValue(ChatParameters.class);
com.google.firebase.database.DatabaseException: Can't convert object of type java.lang.String to type com.example.woofy_nocco.testapp.ChatParameters
at com.google.android.gms.internal.zzelw.zzb(Unknown Source)
at com.google.android.gms.internal.zzelw.zza(Unknown Source)
at com.google.firebase.database.DataSnapshot.getValue(Unknown Source)
at com.example.woofy_nocco.testapp.Chatroom$1.onChildAdded(Chatroom.java:78)
at com.google.android.gms.internal.zzecw.zza(Unknown Source)
at com.google.android.gms.internal.zzeia.zzbyc(Unknown Source)
at com.google.android.gms.internal.zzeig.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
这就是我的数据库结构
答案 0 :(得分:1)
您的onChildAdded
的{{1}}方法已在各个子节点上调用。因此,很可能您不需要在其中循环ChildEventListener
:
dataSnapshot.getChildren()
问题的说明:
通过遍历public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ChatParameters chatParameters = dataSnapshot.getValue(ChatParameters.class);
}
,dataSnapshot.getChildren()
最终将指向聊天消息的各个属性。因此,如果您的chatSnapshot
由ChatParameters
属性和text
属性组成,则message
将指向该chatSnapshot
或text
属性, message
将是一个字符串。由于无法将chatSnapshot.getValue()
转换为您的String
类,因此SDK会引发异常。