从给定UID的Firebase检索Java对象
我对异步编程非常陌生,对于如何在给定唯一ID的情况下检索Java对象,我有点困惑。我遵循了Firebase网站上给出的关于结构化和读取数据的示例,但我不确定如何在不检索整个列表的情况下检索特定对象。我曾经看到人们检索整个列表并迭代它,直到找到正确的对象,但是我觉得这是非常低效的,不是理想的方法 我的firebase数据库结构从给定UID的Firebase检索Java对象,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我对异步编程非常陌生,对于如何在给定唯一ID的情况下检索Java对象,我有点困惑。我遵循了Firebase网站上给出的关于结构化和读取数据的示例,但我不确定如何在不检索整个列表的情况下检索特定对象。我曾经看到人们检索整个列表并迭代它,直到找到正确的对象,但是我觉得这是非常低效的,不是理想的方法 我的firebase数据库结构 { "chats" : { "defcon69" : { "chatMembers" : { "abc con" : true,
{
"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的消息对象。
有一个简单的函数可以实现,我与大家分享一个例子
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());
}
});
你看过这个吗很简单,
如果您想要单值事件监听器,可能是因为您想使用该值一次,所以请尝试使用
ref.addListenerForSingleValueEvent(...);
您的问题中包含了一个指向JSON树图片的链接。请将其替换为实际的JSON文本,您可以通过单击中的导出JSON链接轻松获取。将JSON作为文本使其具有可搜索性,允许我们轻松使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。如果您发布了一些您已经尝试过的代码,这也将是一件好事。这里有数百个关于堆栈溢出的示例。看到您所做的尝试,可以更容易地针对您所处的困境提供帮助。@FrankvanPuffelen我已经成功地使用了我提供的迭代整个列表的示例,但是如果列表的长度开始达到数千或10秒,这似乎是难以置信的低效。