我想检查特定用户是否存在于数据库中,如果存在,那么我不想覆盖数据库中的数据。 我在firebase提供的每个节点上使用唯一密钥生成作为用户ID
所以如果用户已经在场,我不想复制用户。
如何在不收听任何事件的情况下检查此用户是否存在于数据库中,因为我的程序执行依赖于此值
当我这样做时,执行进入无限循环
USER_REFERENCE.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot d : children) {
if (d.child("email").exists()) {
if (d.child("email").getValue().equals(user.getEmail())) {
user.setUserId(d.getKey());
mPresenter.saveUserIntoSession(user);
} else {
String userId = addUser(user);
user.setUserId(userId);
mPresenter.saveUserIntoSession(user);
}
}
}
}
答案 0 :(得分:1)
请尝试检查:
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users");
ref.orderByChild("username").equalTo(name).addListenerForSingleValueEvent(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot.exist() {
//username exist
}
}
以上将读取数据一次,它将检查数据库中是否存在特定用户名
答案 1 :(得分:1)
使用addListenerForSingleValueEvent一次读取数据。
答案 2 :(得分:0)
用简单的术语重述答案:
假设:
@覆盖 public boolean onLongClick(查看视图){
return true; // or false
} return true表示事件已被使用。它被处理了。不会通知其他点击事件。 return false表示事件未被消耗。任何其他点击事件将继续接收通知。 因此,如果您不想在onLongClick之后触发onClick,那么您应该从onLongClick事件返回true。