【发布时间】:2017-03-05 00:19:22
【问题描述】:
我有一个存储用户的数据库,我想在添加新用户之前检查用户是否存在,这样我就不会覆盖。
我有一个函数,它遍历数据库记录并在找到或未找到用户时返回一个布尔值。
public boolean checkUserExists(final String emailAddress, final String emailDomain){
DatabaseReference myRef = database.getReference("Users");
myRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot mydata : dataSnapshot.getChildren()){
User user = mydata.getValue(User.class);
if (user.getEmailAddress().equals(emailAddress) &&
user.getEmailDomain().equals(emailDomain)){
userExists = true;
break;
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return userExists;
}
我目前尝试进行检查的方式是这样的:
if (!(registerRepo.checkUserExists(emailAddress, emailDomain))){
User user = new User(firsName, lastName, emailAddress, emailDomain);
registerRepo.writeUser(user);
} else {
Toast toast = Toast.makeText(getBaseContext(), "User exists", Toast.LENGTH_SHORT);
toast.show();
}
问题在于它不等待读取并继续创建新记录(我正在使用推送,因此它在新的推送 ID 下创建相同的记录)。我已经看到firebase有一个叫做事务处理程序的东西,我认为这是我需要使用的,但是文档没有帮助我,我看过其他人在这里问同样的问题,但不能请找出一个解决方案,如果你能解释一下如何做到这一点,而不是将我重定向到其他问题,我将不胜感激。
【问题讨论】:
标签: java android firebase firebase-realtime-database