Firebase на Android: DataSnapshot.getChildrenCount () возвращает 0 - PullRequest
0 голосов
/ 06 января 2020

Это моя база данных реального времени Firebase:

Firebase Databse

Это мой код:

            DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
            EditText t1 = (EditText) findViewById(R.id.editText10);

            final String s1 = t1.getText().toString();

            mDatabase.child("users").orderByChild("name")
                    .equalTo(s1)
                    .addValueEventListener(new ValueEventListener() {
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                                    TextView tv2 = (TextView) findViewById(R.id.textView5);
                                    tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
                        }
                     }

Я ввожу эти значения в полях EditText:

            editText10 => Anupam Singh

dataSnapshot.getChildrenCount () должно быть 1, но должно быть равно 0.

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 06 января 2020

В вашей базе данных у вас есть следующее:

users
    name_title_company_location

Следовательно, атрибут name_title_company_location является прямым потомком в узле users. Когда вы используете orderByChild, вы не получаете доступ к этому узлу.

Что вам нужно сделать, это добавить id в базу данных:

users
    id
     name_title_company_location

Тогда ваш код будет работать .


Или вы можете изменить код на следующий, go на один уровень вверх:

mDatabase.orderByChild("name_title_company_location").equalTo(...)
0 голосов
/ 06 января 2020

- проблема в порядке у ребёнка. -вы должны пройти запрос и запросить прослушиватель событий с одним значением.

выполните следующие действия:

DatabaseReference mDatabase = FirebaseDatabase.getInstance (). getReference ("users");

     Query query =  mDatabase.("name_title_company_location")
                .equalTo(s1 + "_" + s2 + "_" + s3 + "_" + s4);

                query.addSingleValueEventListener(new ValueEventListener(){
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                                TextView tv2 = (TextView) findViewById(R.id.textView5);
                                tv2.setText(Long.toString(dataSnapshot.getChildrenCount()));
                    }
                 }

- вернет данные

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...