从给定UID的Firebase中检索Java对象

时间:2017-06-16 20:07:47

标签: java android firebase firebase-realtime-database

我是异步编程的新手,我对如何在给定唯一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。

Example of iterating through list

Structuring Firebase data

1 个答案:

答案 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(...);