如何在 kotlin 中获取实时数据库的子项?

How to get the children of a realtime database in kotlin?

This the Realtime Database

这里我想在 Kotlin 中以字符串形式检索用户是招聘人员还是学生。

在事先不知道用户类型的情况下,您无法创建查询来获取特定用户(招聘人员或学生)。如果您需要从数据库中获取所有招聘人员或所有学生,那么您应该考虑使用允许这样做的数据库模式。所以请检查以下方法:

Firebase-root
  |
  --- users
       |
       --- w73...C32
       |    |
       |    --- password: "123456"
       |    |
       |    --- email: "test2@gmail.com"
       |    |
       |    --- type: "recruiter" 
       |
       --- aG4...383
            |
            --- password: "123456"
            |
            --- email: "test@gmail.com"
            |
            --- type: "student" 

如果想获取例如users节点的所有招聘人员,请使用以下代码行:

DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = db.child("users");
Query queryRecruiters = usersRef.orderByChild("type").equalTo("recruiter");
queryRecruiters.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot ds : task.getResult().getChildren()) {
                String email = ds.child("email").getValue(String.class);
                Log.d("TAG", email);
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

logcat 中的结果将是:

test2@gmail.com

另一方面,如果您知道电子邮件地址并且想检查用户的类型(recruiter/student),那么请使用以下代码行:

Query queryByEmail = usersRef.orderByChild("email").equalTo("test2@gmail.com");
queryByEmail.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DataSnapshot> task) {
        if (task.isSuccessful()) {
            for (DataSnapshot ds : task.getResult().getChildren()) {
                String type = ds.child("type").getValue(String.class);
                Log.d("TAG", type);
            }
        } else {
            Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
        }
    }
});

logcat 中的结果将是:

recruiter

请注意,我已经添加了所有节点名称和字段camel case