Android 如何在“Firebase”中使用“DataSnapshot”获取特定值`

Android 如何在“Firebase”中使用“DataSnapshot”获取特定值`,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我想使用fromDataSnapshot 我在此附上屏幕截图,请检查并帮助我从实时数据库中获取特定值 实际上,我正在实现聊天应用程序,在该应用程序中,我希望从组列表中获取用户的值。 这是我的密码 private void loadTotalGroupList() { referenceMainUrl = FirebaseDatabase.getInstance().getReferenceFromUrl("https://pure-coda-174710.fireba

我想使用from
DataSnapshot

我在此附上屏幕截图,请检查并帮助我从
实时数据库中获取特定值

实际上,我正在实现
聊天
应用程序,在该应用程序中,我希望从
组列表
中获取
用户
的值。 这是我的密码

    private void loadTotalGroupList() {

        referenceMainUrl = FirebaseDatabase.getInstance().getReferenceFromUrl("https://pure-coda-174710.firebaseio.com");
        referenceGroupList = referenceMainUrl.child("group_list");

        //Check if child is available or not.
        referenceGroupList.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {


                    Log.e("dataSnapshot","  ==>"+dataSnapshot);
                    Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue();

                    Log.e("newPost","  ==>"+newPost);

                   Log.e("user: ","==>" + newPost.get("user"));  // Here I am getting null value


                } else {
                    Log.e("Child not found", " >>>");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }  
private void loadTotalGroupList(){
referenceMainUrl=FirebaseDatabase.getInstance().getReferenceFromUrl(“https://pure-coda-174710.firebaseio.com");
referenceGroupList=referenceMainUrl.child(“组列表”);
//检查child是否可用。
referenceGroupList.addValueEventListener(新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
if(dataSnapshot.exists()){
Log.e(“dataSnapshot”,“==>”+dataSnapshot);
Map newPost=(Map)dataSnapshot.getValue();
Log.e(“newPost”、“==>”+newPost);
Log.e(“user:,”==>“+newPost.get(“user”);//这里我得到的是空值
}否则{
Log.e(“未找到子项”,“>>”;
}
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
}  

log
这样显示DataSnapshot{key=group_list,value={First group={-KtBH9gnTszNxcXjNu9A={message=assasas,user=sakib}}}}}

您正在收听代码中的位置
/group_list
。这意味着来自该位置的快照将包含以下内容:

/First Group
    /-KtBH9gnTszNxcXjNu9A
        message = "..."
        user = "..."
如果要从该位置获取用户值,则必须使用每个中间路径进行深入研究:

dataSnapshot.child("First Group").child("-KtBH9gnTszNxcXjNu9A").child("user").getValue()
或者更简单地说:

dataSnapshot.child("First Group"/-KtBH9gnTszNxcXjNu9A/user").getValue()
不能跳过快照中的中间路径。或者,您可能希望收听更接近所需值的位置:

referenceMainUrl.child("group_list/First Group/-KtBH9gnTszNxcXjNu9A");

您正在收听代码中的位置
/group\u列表
。这意味着来自该位置的快照将包含以下内容:

/First Group
    /-KtBH9gnTszNxcXjNu9A
        message = "..."
        user = "..."
如果要从该位置获取用户值,则必须使用每个中间路径进行深入研究:

dataSnapshot.child("First Group").child("-KtBH9gnTszNxcXjNu9A").child("user").getValue()
或者更简单地说:

dataSnapshot.child("First Group"/-KtBH9gnTszNxcXjNu9A/user").getValue()
不能跳过快照中的中间路径。或者,您可能希望收听更接近所需值的位置:

referenceMainUrl.child("group_list/First Group/-KtBH9gnTszNxcXjNu9A");

此代码在循环中运行,并为您提供所有“用户”的值

DatabaseReference dRef = FirebaseDatabase.getInstance().getReference().child("group_list").child("First_Group");
    dRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                String userName = snapshot.child("user").getValue(String.class);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

此代码在循环中运行,并为您提供所有“用户”的值

DatabaseReference dRef = FirebaseDatabase.getInstance().getReference().child("group_list").child("First_Group");
    dRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                String userName = snapshot.child("user").getValue(String.class);
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

我已通过使用
addChildEventListener

    referenceGroupList.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {



            Log.e("dataSnapshot KEY", " ==>" + dataSnapshot.getKey());

        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

这里
dataSnapshot.getKey()
返回它的所有子级

我已通过使用
addChildEventListener

    referenceGroupList.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {



            Log.e("dataSnapshot KEY", " ==>" + dataSnapshot.getKey());

        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

这里
dataSnapshot.getKey()
返回它的所有子级

@Doug Stevenson感谢您的回复,但我有一个疑问,即每次创建新组时,该值
-KtBH9gnTszNxcXjNu9A
将不同,因此我如何管理它。我不知道如何从所有组列表中仅获取
用户
。@Doug Stevenson感谢您的回复,但我有一个疑问,即每次创建新组时,该值
-ktbh9gntsznxxjnu9a
将不同,因此我如何管理它。我不知道如何仅从所有组列表中获取
用户