我正在使用firebase。我想检查我的应用程序的重复数据。目前我正在让用户输入姓名和电子邮件。但是如果用户第二次输入相同的名称和电子邮件,它也会被添加到数据库中。 怎么解决这个问题 这是我的代码:
if ((author_name != "pipeline" && author_email != "pipeline@gmail.com") &&
(projectName.StartsWith("ej2") == false || projectName.StartsWith("Ej2") == false))
{
// some operations
}
}
答案 0 :(得分:0)
在将数据推送到数据库之前,如果数据存在与否,首先检查数据库
检查用户名是否存在来自以下代码
DatabaseReference reference = FirebaseDatabase.getInstance().getReference();
Query query = reference.child("issue").orderByChild("id").equalTo(0);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
// dataSnapshot is the "issue" node with all children with id 0
for (DataSnapshot issue : dataSnapshot.getChildren()) {
// do something with the individual "issues"
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
根据您的需要修改此代码
答案 1 :(得分:0)
为了解决这个问题,我重新命令你为每个用户使用一个唯一的标识符。此标识符可以是由push()
方法生成的唯一ID,uid
或email address
。我建议你最后一个选择。由于Firebase不接受密钥中的.
之类的符号,因此您需要像这样进行电子邮件地址的发送:
name@email.com - >名@电子邮件,玉米
为实现此目的,以下两种方法可以帮助您encode
和decode
电子邮件地址。
private String encodeUserEmail(String userEmail) {
return userEmail.replace(".", ",");
}
private String decodeUserEmail(String userEmail) {
return userEmail.replace(",", ".");
}
假设您的数据库结构如下所示:
root
|
--- users
|
--- name@email,com
|
--- uid: 4362454274745
|
--- name: John
您可以使用以下代码验证用户是否存在:
DatabaseReference userEmailRef = FirebaseDatabase.getInstance().getReference().child("users").child(userEmail);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
Log.d("TAG", "Users exists!");
} else {
//Create user
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
userEmailRef.addListenerForSingleValueEvent(valueEventListener);
其中userEmail
是用户的编码电子邮件。
希望它有所帮助。
答案 2 :(得分:0)
我已经像下面的代码那样弄明白了 您需要在此处添加单值侦听器,并检查是否存在要搜索到表中的数据。
mFirebaseDatabase.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(final DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
//If email exists then toast shows else store the data on new key
if (!data.getValue(User.class).getEmail().equals(email)) {
mFirebaseDatabase.child(mFirebaseDatabase.push().getKey()).setValue(new User(name, email));
} else {
Toast.makeText(ChatListActivity.this, "E-mail already exists.", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(final DatabaseError databaseError) {
}
});