Мне нужно выяснить, существует ли в Firebase ребенок с определенным значением в одном из его полей.

Ниже моя структура базы данных:

image of the database structure

-3
neab 27 Фев 2018 в 14:48

5 ответов

Лучший ответ

В вашем случае вы бы настроили запрос так:

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) {

            }
        });

Это отфильтровывает ваши данные на стороне сервера и не требует фильтрации данных на стороне приложения.

0
halfer 9 Авг 2018 в 22:38

Чтобы проверить, существует ли поле, вы можете сделать это:

  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) {


 }
 });

Это проверит, если child("bdxhATalcDRJCiZZcUFUJo3yrJF2") существует в базе данных.

Если вы делаете это:

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

Тогда он проверит, существует ли этот ребенок в базе данных

1
Zaid Mirza 27 Фев 2018 в 11:58

Когда вы делаете ссылку и у вас есть DataSnapshot, вы можете проверить это следующим образом:

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

существуют()

Возвращает true, если снимок содержит ненулевое значение.

Также возвращает истину, если DataSnapshot содержит какие-либо данные. Это немного более эффективно, чем использование DataSnapshot.getValue() !== null.

-1
halfer 18 Авг 2018 в 21:59

EtEmail является EditText

Я сделал это для значения userEmail ... так как у меня нет имени пользователя, кроме электронной почты.

Для такой структуры ...

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

        }
    }
}

OnCreate

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) {

            }
        });
0
bejisan1 11 Фев 2019 в 12:56
postRef = FirebaseDatabase.getInstance().getReference().child("bdxhATalcDRJCiZZcUFUJo3yrJF2");

    postRef.orderByChild("chat_id").equalTo(chat_id)
        .addListenerForSingleValueEvent(new ValueEventListener() {

           @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if(dataSnapshot.exists()){
                   //bus number exists in Database
            } else {
                //bus number doesn't exists.
            }

            @Override
            public void onCancelled(FirebaseError firebaseError) {

            }
        });
0
Nouman Ch 27 Фев 2018 в 12:00