您好我是Firebase和Java的新手,我正在寻找一个有希望的答案。这是我的数据库:
在我的代码中,用户从单独的文本字段输入名称和编号。我使用该名称在“客户端”中生成一个孩子。我想要做的是取“Name”和“Number”值并将它们输出到我的应用程序的文本中。问题是我很难弄清楚如何引用Client的子节点来输出数据。 Alex,David,Will只是用户输入的任何值的占位符,所以我如何引用一个我不知道名字的孩子?
答案 0 :(得分:1)
首先检索您的客户数据快照
//Get datasnapshot at your "users" root node
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Client");
ref.addListenerForSingleValueEvent(
new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
//Get map of users in datasnapshot
collectInfo((Map<String,Object>) dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
//handle databaseError
}
});
然后循环访问客户端,访问他们的地图
private void collectInfo(Map<String,Object> clients) {
//iterate through each client
for (Map.Entry<String, Object> entry : clients.entrySet()){
//Get client map
Map singleClient = (Map) entry.getValue();
// Do whatever you want to do with single clients
}
}
答案 1 :(得分:0)
这是一个简单的方法:
DatabaseReference clientsRef = FirebaseDatabase.getInstance().getReference().child("Client");
clientsRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot clientSnapshot: dataSnapshot.getChildren()) {
System.out.println(clientSnapshot.getKey()); // "Alex", "David", "Will"
System.out.println(clientSnapshot.child("Name").getValue(String.class)); // "Alex", "David", "Will"
System.out.println(clientSnapshot.child("Number").getValue(String.class)); // "12345", "98765", "12345"
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException();
}
});
如果您刚开始使用Android开发和Firebase,我建议您首先使用this codelab。它将为您节省很多时间(和问题)。