gpt4 book ai didi

java - Android Studio firebase 数据库在添加新值之前等待读取

转载 作者:行者123 更新时间:2023-11-30 10:32:39 25 4
gpt4 key购买 nike

我有一个存储用户的数据库,我想在添加新用户之前检查用户是否存在,这样我就不会覆盖。

我有一个函数,它遍历数据库记录并在找到或找不到用户时返回一个 boolean 值。

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 有一个叫做事务处理程序的东西,我认为这是我需要使用的东西,但文档对我没有帮助,我看过其他人在这里问同样的问题,但不能请找出一个解决方案,如果你能解释如何去做而不是将我重定向到其他问题,我将不胜感激。

最佳答案

Firebase 请求是异步的。

因此,如果您想在从数据库中获取结果后执行一些代码,则需要在 checkUserExists 中添加一个回调。

例如:

public interface OnCheckUserExist {
void exist();
void notExist();
}

registerRepo.checkUserExists(emailAddress, emailDomain, new OnCheckUserExist(){
@Override
public void exist(){
Toast toast = Toast.makeText(getBaseContext(), "User exists",Toast.LENGTH_SHORT);
toast.show();
}
@Override
public void notExist(){
User user = new User(firsName, lastName, emailAddress, emailDomain);
registerRepo.writeUser(user);
}
})


public void checkUserExists(final String emailAddress, final String emailDomain, OnCheckUserExist onCheckUserExist){
DatabaseReference myRef = database.getReference("Users");
myRef.addValueEventListener(new ValueEventListener() {
boolean userExist;

@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)){
onCheckUserExist.exist();
userExist = true;
break;
}
}
if (!userExist){
onCheckUserExist.notExist();
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

关于java - Android Studio firebase 数据库在添加新值之前等待读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42596777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com