如何查询firebase以获取在Android中使用的子数据?

时间:2017-05-20 20:08:57

标签: android firebase firebase-realtime-database

我有以下结构的Firebase数据库:

database
    field1
        -KkXawoXnSCInWXugbm-
            email: "email1@email.com"
            firstName: "John"
            lastName: "Smith"
            phoneNumber: "123456"
            password: "password1"
    field2
        -KkXanaeY4pWSl2Aqltt
            email: "email2@email.com"
            firstName:"Jane"
            lastName: "Doe"
            phoneNumber: "5550123"
            password: "password2"

在我的Android项目中,我有一个带有电子邮件和密码的登录屏幕。我有一个User抽象类,它有两个子类,field1和field2。

public abstract class User {
    private String firstName;
    private String lastName;
    private String email;
    private String phoneNumber;
    private String userID; //this is the Firebase generated key as seen above
    private String password;
}

我想要做的是使用电子邮件找到代表该用户的节点并访问其余的详细信息,以便我可以验证在登录页面中输入的信息。

我是Firebase的初学者并且已经广泛搜索了这样做的方法,但一直无法解决这个问题。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

如果你想查看例如的字段。字段1。 然后,您只需使用以下查询。

ref.child("field1")  //only useful if you are having multiple nodes in field1
     .orderByChild("email")
     .equalTo("your_email_query")

使用此DataSnapshot,您可以查询其他详细信息。 希望这有效!!

答案 1 :(得分:0)

您不需要这样做。我要重新命令您将节点从UID更改为电子邮件address。通过这种方式,您将拥有查询所需的一切。但是,由于Firebase在密钥重写中不接受.符号,因此您可以像这样输入电子邮件地址:

  

name@email.com - >名@电子邮件,玉米

正如您可能看到的那样,我更改了.中的,。为此,我使用这种方法重新命令你:

static String encodeUserEmail(String userEmail) {
    return userEmail.replace(".", ",");
}

static String decodeUserEmail(String userEmail) {
    return userEmail.replace(",", ".");
}

希望它有所帮助。