Firebase,在推送之前检查数据是否已经存在

时间:2018-12-04 14:58:26

标签: java android firebase firebase-realtime-database

我在firebase中遇到addind数据的麻烦,应该检查该帐户是否已注册的代码无法正常工作。这是使用的代码和结构:

        mDatabase = FirebaseDatabase.getInstance().getReference("Users");

  mDatabase.addListenerForSingleValueEvent(new ValueEventListener() {@Override
        public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot data: dataSnapshot.getChildren()){
            Log.d("child:",data.getKey());
            if (data.child(user.getName()).exists()) {

              Log.d("child exists",user.getName());
              Toast.makeText(getApplicationContext(),
                    "child already exists",
                     Toast.LENGTH_LONG).show();
                     continue;
            } else {
               mDatabase.push().setValue(user);
            }
        }
      }

结构 structure firebase

规则:

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {
    ".read": true,
    ".write": true
  }
}

它添加一个用户,而不是输入if部分...

1 个答案:

答案 0 :(得分:1)

您可以做的是直接使用orderByChild()equalTo()来查找是否存在具有特定用户名的用户。

这将完美地在此数据库结构中工作,并且它将是一个更好的解决方案。代码看起来像这样:

reference.orderByChild("name").equalTo(user.getName()).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            if(dataSnapshot.exists())
                             // do what you want
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                  )};