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

时间:2018-02-20 13:29:50

标签: android firebase firebase-realtime-database

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

MainActivity.class

// 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实时数据库的结构

Here's the structure of my Firebase Realtime Database

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

1 个答案:

答案 0 :(得分:1)

在Firebase数据库中创建用户时,有一种解决方法。不使用push()方法提供的随机生成ID,而是使用email address。您的数据库结构应如下所示:

Firebase-root
    |
    --- users
         |
         --- john@email,com
                 |
                 --- //user details

现在要检查用户的existens,您可以在exists()对象上使用DatabaseReference方法。因此,请使用以下代码:

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);