Firebase:从UID访问子级

时间:2017-09-21 22:31:18

标签: android firebase firebase-realtime-database

我在Java中使用firebase,我的数据库中有一个名为" Chatmessages"用户列表(已开始聊天)此列表包含这些用户的UID。在我的数据库中,我还有一个"用户"子,包含所有用户的信息。如何使用" Chatmessages"使用UID列表,但从"用户"中获取相应UID的信息。

Database

2 个答案:

答案 0 :(得分:2)

根据您的数据库结构,要实现这一点,您需要两次查询您的数据库。假设两个节点ChatmessagesUsers都是Firebase根目录的直接子节点,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference chatIdRef = rootRef.child("Chatmessages").child(chatId);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();

            DatabaseReference usersRef = rootRef.child("Users").child(uid);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String image = dataSnapshot.child("image").getValue(String.class);
                    String name = dataSnapshot.child("name").getValue(String.class);
                    Boolean onlineStatus = dataSnapshot.child("onlineStatus").getValue(Boolean.class);
                    String status = dataSnapshot.child("nstatusame").getValue(String.class);
                    Log.d("TAG", image + " / " + name + " / " + onlineStatus + " / " + status);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {}
            };
            usersRef.addListenerForSingleValueEvent(eventListener);

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
chatIdRef.addListenerForSingleValueEvent(eventListener);

使用此代码,您只能从特定聊天中获取用户的数据。请注意我在第一个DatabaseReference中使用了一个名为chatId的变量,它实际上是特定聊天的ID。例如,在你的屏幕截图中是5kAiGg7zu ...

答案 1 :(得分:0)

如果我正确理解您的问题,您希望获得特定用户的聊天消息。为此,您需要访问特定用户的uid。保存它的一种方法是,当用户登录或注册获取密钥并将其保存在SharedPreferences上时。

然后,在获得密钥后,您可以运行firebase查询以检索此用户的聊天消息。您有3个选项可以使用您要使用的firebase监听器。 ValueEventListener,它将为所有数据提供数据快照,ChildEventListener将返回一个子节点,SingleValueEvenetListener将为所有数据提供一次数据快照。

Query queryChatMessages = mDatabase.child("Chatmessages").child(uid);
queryChatMessages.addChildEventListener("your listener");