Android 检查数据库中是否存在电子邮件

Android 检查数据库中是否存在电子邮件,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试检查用户的电子邮件是否存在于我的Firebase实时数据库中。我使用Firebase身份验证来获取用户的Google Play电子邮件,如果用户的电子邮件在我的Firebase上不存在,则会提示用户进行其他活动。这是我的密码: 主课 // Let's declare Firebase private DatabaseReference mDatabase; private FirebaseAuth mAuth; private FirebaseUser mUser; @Overrid

我正在尝试检查用户的电子邮件是否存在于我的Firebase实时数据库中。我使用Firebase身份验证来获取用户的Google Play电子邮件,如果用户的电子邮件在我的Firebase上不存在,则会提示用户进行其他活动。这是我的密码:

主课

// Let's declare Firebase
private DatabaseReference mDatabase;
private FirebaseAuth mAuth;
private FirebaseUser mUser;

@Override
public void onStart() {
    super.onStart();
    // Check if user is signed in (non-null) and update UI accordingly.
    mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");
    mUser = mAuth.getInstance().getCurrentUser();

    mDatabase.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String dEmail = dataSnapshot.getValue().toString();
            String gEmail = mUser.getEmail();
            for(DataSnapshot data: dataSnapshot.getChildren()){
                if(data.child("email").child(EncodeString(gEmail)).exists()) {
                    Toast.makeText(getApplicationContext(), "There's one: " + EncodeString(gEmail), Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(getApplicationContext(), "No email: " + EncodeString(gEmail), Toast.LENGTH_LONG).show();
                }
            }
            /*
            if(dEmail == gEmail) {
                startActivity(new Intent(getApplicationContext(), RegisterActivity.class));
                finish();
            } else {
                Toast.makeText(getApplicationContext(), "No email", Toast.LENGTH_LONG).show();
            }*/
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

public static String EncodeString(String string) {
    return string.replace(".", ",");
}

public static String DecodeString(String string) {
    return string.replace(",", ".");
}
这是我的Firebase实时数据库的结构


更新:问题是我如何检查电子邮件(电子邮件是我的google play中的一封,它是sholomon12@g..)存在于我的数据库中。注意:我插入了相同的电子邮件,我只是用逗号替换了数据库中的电子邮件,因为我无法在firebase数据库中插入点

在firebase数据库中创建用户时,这里有一个解决方法。不要使用
push()
方法提供的随机生成的id,而是使用
电子邮件地址。您的数据库结构应如下所示:

Firebase-root
    |
    --- users
         |
         --- john@email,com
                 |
                 --- //user details
现在,要检查用户是否存在,可以使用
DatabaseReference
对象上的
exists()
方法。为此,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference yourRef = rootRef.child("users").child("john@email,com");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if(dataSnapshot.exists()) {
            //do something
        } else {
            //do something else
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
yourRef.addListenerForSingleValueEvent(eventListener);

您发布的代码未按您的意愿执行?换句话说,问题是什么?(关于代码)是的,Toast的输出应该是“有一个:…”。但我的代码似乎有问题。我正在使用同一封电子邮件(在我的google play和我插入数据库的电子邮件上进行身份验证),但输出仍然是“无电子邮件”,你的列表不应该在.child(“用户”).child(uid)而不是.child(“用户”)?@AndréKool是否可以在.push()上使用“uid”?@Transit查看我写的关于将用户链接到firebase中的数据的文章。是的,你是对的。电子邮件也可以成为用户的唯一ID。这次我宁愿使用它而不是push()。谢谢你,亚历克斯!