Firebase - получение дочернего значения под уникальным ключом - PullRequest
0 голосов
/ 15 мая 2018

Я использую Google Firebase для хранения базы данных пульса пользователя из Android Wear.Сейчас я пытаюсь получить значение тактового импульса для дочернего элемента "tmpHR", но значение продолжает показывать ноль.

Вот структура моей базы данных:

Я хочу получить дочернее значение int tmpHR под случайным ключом

Вот мои строки кода:

    Integer hrValue;
     ArrayList<Integer> array1;
    array1 = new ArrayList<>();

DatabaseReference userdatabase = FirebaseDatabase.getInstance().getReference().child("Users");
 DatabaseReference ref = userdatabase.child(user.getUid()).child("hrvalue").child("nilaihr");`

`ref.addChildEventListener(new ChildEventListener() {`

            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                for (DataSnapshot uniqueKeySnapshot : dataSnapshot.getChildren()) {
                    //Loop 1 to go through all the child nodes of nilaihr
                    //store random key in uniqueKeySnapshot
                        Integer hrValue = uniqueKeySnapshot.child("tmpHR").getValue(Integer.class);
                        // random key -> child tmpHR -> store in Integer hrValue
                        Log.i("heart rate value", "hrvalue " + hrValue);
                       showData(dataSnapshot);
                       }

            }


            @Override
            public void onChildChanged(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onChildRemoved(DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(DataSnapshot dataSnapshot, String s) {

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

    }

    private void showData(DataSnapshot dataSnapshot) {array1.add(hrValue);}

А вот логкат:

05-15 19:01:55.824 27624-27624/com.example.amiramaulina.retrievedataheartbeat I/database array: array database [null, null, null,....., null]
05-15 19:01:55.824 27624-27624/com.example.amiramaulina.retrievedataheartbeat I/heart rate value: hrvalue null

Раньше у случайного ключа был только один дочерний элемент (целое число "tmpHR"), и мне удалось получитьзначение.Так как я добавил другого потомка (String Date), значение tmpHR продолжает возвращать ноль.

Любые решения будут оценены.Спасибо!

1 Ответ

0 голосов
/ 15 мая 2018

Попробуйте следующее:

 ref.addChildEventListener(new ChildEventListener() {

        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {   
                    Integer hrValue = dataSnapshot.child("tmpHR").getValue(Integer.class);
                   showData(dataSnapshot);
           }



        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Удалите цикл for, поскольку вам не нужно выполнять цикл для получения tmpHR в этом случае.

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