Java 从Firebase中嵌套保存的数据检索数据
我有这样的结构: 我需要从在线客户那里获取数据。我的尝试:Java 从Firebase中嵌套保存的数据检索数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我有这样的结构: 我需要从在线客户那里获取数据。我的尝试: currentDriverId = mFireBaseAuth.getCurrentUser().getUid(); mDataBase = FirebaseDatabase.getInstance().getReference().child("Users").child("Driver").child(currentDriverId).child("OnlineClients"); final ArrayList<Studen
currentDriverId = mFireBaseAuth.getCurrentUser().getUid();
mDataBase = FirebaseDatabase.getInstance().getReference().child("Users").child("Driver").child(currentDriverId).child("OnlineClients");
final ArrayList<Student> users = new ArrayList<>();
ValueEventListener postListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
Student student = data.getValue(Student.class);
users.add(student);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
}
};
mDataBase.addListenerForSingleValueEvent(postListener);
已经尝试过:类似的,但没有成功
注意:我只需要从当前登录用户检索OnlineClient,这就是我使用currentDriverId的原因。更改此选项:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
Student student = data.getValue(Student.class);
users.add(student);
}
}
为此:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Student student = dataSnapshot.getValue(Student.class);
users.add(student);
}
删除for循环,因为在循环时,将以字符串形式检索值。另外,请确保在使用setValue时添加了Student类型的对象作为参数
检索值的另一种方法是执行以下操作:
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
String firstName = data.child("FirstName").getValue(String.class);
String lastName = data.child("LastName").getValue(String.class);
}
}
代码中的问题在于,StudentStreetNumber字段是在String类型的学生类中声明的,而在数据库中是一个长数字。要解决此问题,只需将属性的类型更改为long: 代码中的另一个问题是getter。要解决这个问题,请参阅以下帖子中的答案:
请添加您的学生课程内容。@AlexMamo补充说是这样的!实际上,我在一个类中有不一致的地方,它被声明为int,然后可能被转换为long,在另一个类中则被转换为String。没有必要更改我当前的代码,但要修复这些不一致的地方。很高兴听到它起作用了。如果你认为我的回答也有助于未来的FialBasic开发者,请考虑投票表决。我会很感激的。谢谢
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
String firstName = data.child("FirstName").getValue(String.class);
String lastName = data.child("LastName").getValue(String.class);
}
}
private long StudentStreetNumber;