如何在没有事件侦听器的情况下检查数据是否仅存在于firebase数据库中

时间:2018-04-03 10:30:57

标签: android firebase firebase-realtime-database

我想检查特定用户是否存在于数据库中,如果存在,那么我不想覆盖数据库中的数据。 我在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);
                        }
                    }
                }
            }

3 个答案:

答案 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。