我是异步编程的新手,我对如何在给定唯一ID的情况下检索Java对象感到困惑。我已经按照Firebase网站上给出的关于构造和读取数据的示例进行了操作,但我不确定如何在不检索整个列表的情况下检索特定对象。我已经看到人们检索整个列表并迭代它直到找到正确的对象,但我觉得这是非常低效的,而不是理想的方法。
我的firebase数据库结构
{
"chats" : {
"defcon69" : {
"chatMembers" : {
"abc con" : true,
"rGmgSVGcq4WE6kehY4HH5z7ntIQ2" : true
},
"chatMessages" : {
"-KmYAcmmvmSfMrOYnAtR" : "-KmYAcmmvmSfMrOYnAtR",
"-KmYAmNmjWExC1gcCuF8" : "-KmYAmNmjWExC1gcCuF8",
"-KmZuNNG6lZCn_HeA1aq" : "-KmZuNNG6lZCn_HeA1aq"
},
"chatName" : "FLT",
"chatText" : "hey ",
"chatTime" : 1497415382731,
"chatUUID" : "defcon69"
}
},
"messages" : {
"defcon69" : {
"-KmYAcmmvmSfMrOYnAtR" : {
"messageText" : "test",
"messageTime" : 1497386352516,
"messageUUID" : "-KmYAcmmvmSfMrOYnAtR",
"messageUser" : "con"
},
"-KmYAf3FKCzJyL8-3_9U" : {
"messageText" : "hey",
"messageTime" : 1497386361825,
"messageUUID" : "-KmYAf3FKCzJyL8-3_9U",
"messageUser" : "con"
}
}
}
我特意尝试检索一个消息对象,因为它是uid。
答案 0 :(得分:0)
有一个简单的功能,我可以分享一个例子
String uid="your uid";
DatabaseReference ref= mDatabase.child("messages").child(uid).getRef();
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(dataSnapshot.exists()){
Message m=dataSnapshot.getValue(Message.class);
// your message is here do what you want
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("dberror",databaseError.getMessage());
}
});
你看这个吗,它很简单,
如果你想要单值事件监听器可能因为你想使用Value一次,所以尝试使用
ref.addListenerForSingleValueEvent(...);