我正在尝试检查用户的电子邮件是否存在于我的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实时数据库的结构
更新:问题是如何检查我的数据库中是否存在电子邮件(我的google play中的电子邮件是sholomon12 @ g ..)。注意:我插入了相同的电子邮件,我只是用逗号替换了数据库中的那个,因为我无法在firebase数据库中插入点
答案 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);