有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓从给定UID的Firebase检索Java对象

我对异步编程非常陌生,对于如何在给定唯一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) 个答案

  1. # 1 楼答案

    这里有一个简单的函数,我和大家分享一个例子

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