当子节点的父节点未知时从Firebase检索数据

时间:2018-04-05 20:16:49

标签: java android firebase firebase-realtime-database

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

link to image

现在,当有人向您发送带有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”或“recieved”)

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

你可以通过查询得到一些,但是要保持性能受到控制是很棘手的,因为你需要为每个用户定义一个索引。对于某些问题,请参阅我的答案herehere

更好的方法是将请求分成两个单独的列表:已发送的列表和已收到的列表。 E.g。

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

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