如何从Firebase实时数据库正确检索值? [英] How to properly retrieve value from Firebase Realtime Database?
本文介绍了如何从Firebase实时数据库正确检索值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我具有以下数据结构:
名称
可以有无限数量的子级.
name
could have an unlimited number of children.
以及以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference dirFire = rootRef.child("messages").child("name");
dirFire.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String name = dataSnapshot.getValue(String.class);
//do what you want with the name
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
使用上面的代码,我无法获取 name
的值.如果客户端不知道 key
,如何获取 name
?
With the code above, I can't retrieve the value of name
. How can I retrieve name
if the key
is unknown to the client?
推荐答案
请使用以下代码:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messagesRef = rootRef.child("messages");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String key = ds.getKey();
DatabaseReference keyRef = rootRef.child("messages").child(key).child("name");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds1 : dataSnapshot.getChildren()) {
String name = ds1.getValue(String.class);
Log.d("TAG", name);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
keyRef.addListenerForSingleValueEvent(valueEventListener);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(eventListener);
这是另一种使用解决方案的方法,该解决方案看起来更早.
Here is another approach using a solution that looks like an earlier one.
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference messagesRef = rootRef.child("messages");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
for (DataSnapshot nameSnapshot : ds.child("name").getChildren()) {
String name = nameSnapshot.getValue(String.class);
Log.d("TAG", name);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
messagesRef.addListenerForSingleValueEvent(eventListener);
输出将是:
John Miche
Joe Mitch
Sabr. A
Luis Jean
这篇关于如何从Firebase实时数据库正确检索值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文