如何在FirebaseDatabase中执行搜索?

时间:2016-06-05 13:16:33

标签: android firebase firebase-realtime-database

描述

我的Firebase NoSQL数据库应该看起来像这样:

Users

每当新用户登录时,都应该推送用户Java模型。

问题

如何检查拥有该电子邮件地址的用户是否已拥有帐户?由于电子邮件地址位于:Root> PushID>电子邮件;和推送ID是自动生成的,我不知道如何迭代所有推送ID并检查是否有任何其电子邮件密钥设置为指定值。

我已阅读文档,但无法弄清楚如何解决此问题。

向Shubhank的回答中学习

Firebase涉及儿童的方法可适用于任何儿童,无论其等级如何,即不限于直系儿童。

在这个问题中,要搜索的孩子比普通父母低2级。可以忽略第一级子项,并且可以直接将查询方法应用于目标子项。

1 个答案:

答案 0 :(得分:2)

您应首先为用户制作模型类

class User { 
    public String email;
    public String name;
}

然后从数据库中获取用户并将其映射到用户对象

  1. 简单循环浏览所有结果查询

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    
    // i don't know the end point since you have not specified it in the image           
    database.getReference("myUsersEndPoint").addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                      for (DataSnapshot data : dataSnapshot.getChildren()) {
                          User user = data.getValue(User.class);
                          if (myField.getText().toString().eqaulsIgnoreCase(user.email)) {
                            // exist
                          }
                      }
    
                   }
    
          @Override
          public void onCancelled(DatabaseError databaseError) 
                    Log.w("MyApp", "getUser:onCancelled", databaseError.toException());
          }
       });
    
  2. 仅搜索特定值   在此示例中,我们使用orderByChildequalTo方法将结果限制为特定子值

    FirebaseDatabase database = FirebaseDatabase.getInstance();
    
    // i don't know the end point since you have not specified it in the image           
    database.getReference("myUsersEndPoint").orderByChild("email").equalTo("emailToSearchhere").addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                      for (DataSnapshot data : dataSnapshot.getChildren()) {
                          // here the user will have the specified email only 
                      }
    
                   }
    
          @Override
          public void onCancelled(DatabaseError databaseError) 
                    Log.w("MyApp", "getUser:onCancelled", databaseError.toException());
          }
       });