![](/img/trans.png)
[英]Retrieve child nodes Firebase Database Android into separate variables?
[英]Android, Firebase - database only returns single child node as string when trying to retrieve multiple child nodes
我刚刚开始尝试在Android应用程序中使用Firebase。 我可以将数据写到数据库中,但是尝试检索数据时遇到了问题。
我检索数据的方法:
public void getCurrentUserData() {
FirebaseDatabase database = FirebaseDatabase.getInstance();
FirebaseUser loggedUser = firebaseAuth.getCurrentUser();
String uid = loggedUser.getUid();
DatabaseReference userRef = database.getReference().child("Users").child(uid);
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
//crashes because user is not a string
//User user = dataSnapshot.getValue(User.class);
//works because function is returning first child of uID as a string
String user = dataSnapshot.getValue().toString();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
调试时:
dataSnapshot = "DataSnapshot { key = bio, value = test }"
我期望这将返回uid中包含的所有子代(bio,dob,firstName,joinDate,lastName,位置)并将其放入我的User对象,但实际上看起来好像它仅以字符串形式返回了第一个子节点(bio) 。
为什么会发生这种情况,以及如何检索完整的子节点集?
任何帮助表示赞赏。 谢谢。
如果要获取用户的所有属性,则需要创建一个自定义Java类来表示该用户,或者需要在自己的代码中从各个子快照中读取属性。 例如:
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
String firstName = dataSnapshot.child("firstName").getValue(String.class);
String lastName = dataSnapshot.child("lastName").getValue(String.class);
...
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
或者,您可以使用以下方法遍历属性:
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot propertySnapshot: dataSnapshot.getChildren()) {
System.out.println(propertySnapshot.getKey()+": "+propertySnapshot.getValue(String.class));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.