在Firebase中检索具有ID的嵌套数据?

时间:2019-05-09 19:34:28

标签: java android firebase firebase-realtime-database

我正在尝试从Message节点检索消息。消息中的每个消息都有一个ID。我试图实现的最终结果只是为每个用户发送消息,或者有一种更好的方法来存储数据,因为我不需要存储消息的密钥,但是当我不包含密钥时,旧数据就可以得到删除。

structure of my data

 DatabaseReference dbfriends= FirebaseDatabase.getInstance().getReference().child("Users");
            dbfriends.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                    if(dataSnapshot.exists())
                    {
                            for (DataSnapshot productSnapshot:dataSnapshot.getChildren())
                            {
                                Log.i("IDDD",productSnapshot.toString());
                                Log.i("IDDDDDDDD",productSnapshot.child("Messages").getValue().toString());
                                   String friend=productSnapshot.child("Username").getValue().toString();
                                   Log.i("This is friend",friend.toString());
                                    friends.add(friend);

                            }

1 个答案:

答案 0 :(得分:0)

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messagesRef = rootRef.child("Users").child(uid).child("Messages");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String sender = ds.child("sender").getValue(String.class);
            String message = ds.child("message").getValue(String.class);
            Log.d(TAG, sender + ": " + message);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
messagesRef.addListenerForSingleValueEvent(valueEventListener);

您的logcat中的结果将是:

Jeffy: Alic how r you?
Jeffy: Alic how r you?

如果您还需要密钥,只需使用:

String key = ds.getKey();