java - 从 Firebase 中嵌套保存的数据中检索数据

标签 java android firebase firebase-realtime-database

我有这样的结构:

enter image description here

我需要从“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/

相关文章:

java - JNI 中的 ParcelFileDescriptor.createPipe

android - Eclipse - 单击 XML 内容会删除/重新排列它吗?

firebase - 如何查询 Firebase 中与字符串前缀匹配的键

node.js - Firestore 中什么算作读取操作?

ios - 在加载 View iOS 之前从 Firebase 检索数据

java - 如何在运行时生成正则表达式以匹配数值范围

java - 按钮中的按钮 (android.content.Context) 无法应用于 (Java.lang.Object)

java - 最简单的条件查询

android - 如何让 Android Studio 将文件识别为源(测试)

android - 如何在 Android 上获取 NetworkCapabilities 对象?