Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何查询firebase以获取在Android中使用的子数据?_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

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

如何查询firebase以获取在Android中使用的子数据?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我有一个Firebase数据库,其结构如下: database field1 -KkXawoXnSCInWXugbm- email: "email1@email.com" firstName: "John" lastName: "Smith" phoneNumber: "123456" password: "password1" field2

我有一个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项目中,我有一个带有电子邮件和密码的登录屏幕。我有一个用户抽象类,它有两个子类,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的初学者,已经广泛地寻找了一种实现这一点的方法,但一直无法解决这个问题。任何帮助都将不胜感激

如果您想查看字段,例如Field1。 然后您可以简单地使用以下查询

ref.child("field1")  //only useful if you are having multiple nodes in field1
     .orderByChild("email")
     .equalTo("your_email_query")
使用此DataSnapshot,您可以查询其他详细信息。
希望这能奏效

如果您想查看字段,例如Field1。 然后您可以简单地使用以下查询

ref.child("field1")  //only useful if you are having multiple nodes in field1
     .orderByChild("email")
     .equalTo("your_email_query")
使用此DataSnapshot,您可以查询其他详细信息。
希望这能奏效

你不需要这样做。我建议您做的是将节点从
UID
更改为email
address
。这样,您将拥有所有需要查询的内容。但由于Firebase不接受密钥中的
符号,我建议您将电子邮件地址如下所示:

name@email.com -> name@email,com

正如您可能看到的,我已经更改了
中的
。为此,我建议您使用以下方法:

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

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

希望有帮助。

您不需要这样做。我建议您做的是将节点从
UID
更改为email
address
。这样,您将拥有所有需要查询的内容。但由于Firebase不接受密钥中的
符号,我建议您将电子邮件地址如下所示:

name@email.com -> name@email,com

正如您可能看到的,我已经更改了
中的
。为此,我建议您使用以下方法:

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

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

希望有帮助。

UUID是什么意思?如果是这样会更好,否则搜索大型数据库会很慢,这意味着UUID?如果是这样会更好,否则搜索大型数据库会很慢,我这样做了,我的数据库现在是以下形式:field1电子邮件:email1@email.comfirstName:“John”lastName:“Smith”电话号码:“123456”密码:“password1”但dataSnapshot.getValue(field1.class)现在返回空值,如何修复此问题?如果在
userId
上设置了youdr
DatabaseReference
,则需要像这样使用String类:
String email=(String)dataSnapshot.child(“email”).getValue()
嘿,我这样做了,我的数据库现在是以下形式的:field1 email:email1@email.com"firstName:“John”lastName:“Smith”电话号码:“123456”密码:“password1”但dataSnapshot.getValue(field1.class)现在返回空值,如何修复此问题?如果在
userId
上设置了youdr
DatabaseReference
,则需要使用如下字符串类:
String email=(String)dataSnapshot.child(“email”).getValue()