Java 如何查找Firebase中是否存在字段中具有特定值的子项?

Java 如何查找Firebase中是否存在字段中具有特定值的子项?,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我需要找出Firebase中是否存在一个字段中具有特定值的子项 以下是我的数据库结构: 要检查字段是否存在,可以执行以下操作: DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2"); ref.addValueEventListener(new ValueEventListener(){ @Override public vo

我需要找出Firebase中是否存在一个字段中具有特定值的子项

以下是我的数据库结构:


要检查字段是否存在,可以执行以下操作:

  DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2");
  ref.addValueEventListener(new ValueEventListener(){
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
   if(dataSnapshot.exists()){
        //then it exists
  }

  @Override
  public void onCancelled(FirebaseError firebaseError) {


 }
 });
这将检查 数据库中存在ChildBdxCatalCdRjCizzCufJo3YRjF2

如果您这样做:

ref=FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2").orderByChild("chat_id").equalTo(chatid);

然后,它将检查数据库中是否也存在该子级

当您进行引用并拥有DataSnapshot时,您可以这样检查它:

yourref.child("chat_id").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        if (!dataSnapshot.exists()) {
            //Do something
        } 
    }
存在

如果快照包含非空值,则返回true


如果此DataSnapshot包含任何数据,也将返回true。它比使用DataSnapshot.getValue稍有效率!==空。

在您的情况下,您可以设置如下查询:

DatabaseReference reference = FirebaseDatabase.getInstance().getReference();

        Query query = reference.orderByChild("chat_id").equalTo("CHAT_ID_To_COMPARE");

        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {

                    for (DataSnapshot issue : dataSnapshot.getChildren()) {
                        // do something with the individual object
                    }
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
这将在服务器端过滤您的数据,而无需在应用程序端过滤数据。

etEmail是一个编辑文本

我这么做是为了userEmail的价值。。。因为除了电子邮件,我没有任何用户名

对于这样的结构

"users": {
    pushId: {
        "userEmail": {

        }
    }
}
一次创建

etEmail.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(final CharSequence s, int start, int before, int count) {
                //yourFunction();
                DatabaseReference databaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
                databaseUsers.orderByChild("userEmail").equalTo(String.valueOf(s))
                        .addListenerForSingleValueEvent(new ValueEventListener() {

                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if (dataSnapshot.exists()) {
                                    for (DataSnapshot issue : dataSnapshot.getChildren()) {
                                            // do something with the individual object
                                            //User email already exists
                                            //do something

                                            //return; stops the function from executing further
                                            return;
                                    }
                                } else {
                                // email doesn't exists.
                                // do something

                                }
                            }

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

                            }
                        });
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });
etEmail.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(final CharSequence s, int start, int before, int count) {
                //yourFunction();
                DatabaseReference databaseUsers = FirebaseDatabase.getInstance().getReference().child("users");
                databaseUsers.orderByChild("userEmail").equalTo(String.valueOf(s))
                        .addListenerForSingleValueEvent(new ValueEventListener() {

                            @Override
                            public void onDataChange(DataSnapshot dataSnapshot) {
                                if (dataSnapshot.exists()) {
                                    for (DataSnapshot issue : dataSnapshot.getChildren()) {
                                            // do something with the individual object
                                            //User email already exists
                                            //do something

                                            //return; stops the function from executing further
                                            return;
                                    }
                                } else {
                                // email doesn't exists.
                                // do something

                                }
                            }

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

                            }
                        });
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });