我在Java中使用firebase,我的数据库中有一个名为" Chatmessages"用户列表(已开始聊天)此列表包含这些用户的UID。在我的数据库中,我还有一个"用户"子,包含所有用户的信息。如何使用" Chatmessages"使用UID列表,但从"用户"中获取相应UID的信息。
答案 0 :(得分:2)
根据您的数据库结构,要实现这一点,您需要两次查询您的数据库。假设两个节点Chatmessages
和Users
都是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");