【问题标题】:Retrieving data from Firebase when the parent of the child node is unknown当子节点的父节点未知时从 Firebase 检索数据
【发布时间】:2018-04-06 05:14:18
【问题描述】:

我正在构建一个应用程序,您可以在其中发送和获取好友请求。数据库结构如下:

现在我想在有人向您发送带有 addValueEventListener 的好友请求时构建一个“警报功能”,以便我可以查看当前用户在数据库中是否有“已收到”。 类似的东西:

mFriendRequestDatabase = 
FirebaseDatabase.getInstance().getReference().child("Friend_req");
    mCurrent_user = FirebaseAuth.getInstance().getCurrentUser();
    String current_user_id = mCurrent_user.getUid();
    mFriendRequestDatabase.child(current_user_id).addValueEventListener(new 
ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

问题是我无法查看当前用户是否有“已发送”或“已收到”,因为我不知道发送请求的人的 ID。 dataSnapshot.child(???).child("sent" or "received")

我该如何解决这个问题?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    您可以通过查询获得其中的一些信息,但要控制性能会很棘手,因为您需要为每个用户定义一个索引。对于这方面的一些问题,请参阅我的回答 herehere

    更好的方法是将请求分成两个单独的列表:发送的和接收的。例如

    friend_requests
      uidOfChristoffer
        received
          uidOfPuf: true
        sent:
          uidOfSomeoneElse: true
     uidOfPuf
        sent
          uidOfChristoffer: true
     uidOfSomeoneElse
        received
          uidOfChristoffer: true
    

    现在您可以通过阅读/friend_requests/theirUid/received 来专门获取任何人收到的内容。这是多对多关系的一种更具体的方法,所以我也建议阅读我对 here 的回答。

    【讨论】:

    • 我还是不明白这对我有什么帮助?我无法访问收到请求的用户的用户 ID?或者我只是不明白。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多