Android 如何在“Firebase”中使用“DataSnapshot”获取特定值`
我想使用fromAndroid 如何在“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
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
将不同,因此我如何管理它。我不知道如何仅从所有组列表中获取用户
。