我有这样的结构:
我需要从“OnlineClients”获取数据。我的尝试:
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);
有错误:
com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
学生类(class):
public class Student {
private String FirstName;
private String LastName;
private String StudentSchool;
private String StudentState;
private String StudentStreet;
private String StudentStreetNumber;
public Student(){
}
public String getFirstName() {
return FirstName;
}
public void setFirstName(String firstName) {
FirstName = firstName;
}
public String getLastName() {
return LastName;
}
public void setLastName(String lastName) {
LastName = lastName;
}
public String getStudentSchool() {
return StudentSchool;
}
public void setStudentSchool(String studentSchool) {
StudentSchool = studentSchool;
}
public String getStudentState() {
return StudentState;
}
public void setStudentState(String studentState) {
StudentState = studentState;
}
public String getStudentStreet() {
return StudentStreet;
}
public void setStudentStreet(String studentStreet) {
StudentStreet = studentStreet;
}
public String getStudentStreetNumber() {
return StudentStreetNumber;
}
public void setStudentStreetNumber(String studentStreetNumber) {
StudentStreetNumber = studentStreetNumber;
}
}
已尝试:how to retrieve all the data within nested firebase database和类似的但没有成功。
注意:我只需要从当前登录的用户检索“OnlineClients”(这就是我只使用 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 循环,因为在循环时,您将以 String
形式检索值。另外,请确保在使用 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);
}
}
关于java - 从 Firebase 中嵌套保存的数据中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57035792/