Android 检查数据库中是否存在电子邮件
我正在尝试检查用户的电子邮件是否存在于我的Firebase实时数据库中。我使用Firebase身份验证来获取用户的Google Play电子邮件,如果用户的电子邮件在我的Firebase上不存在,则会提示用户进行其他活动。这是我的密码: 主课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
// 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()。谢谢你,亚历克斯!