Извлечение данных из нескольких push-идентификаторов в рамках одного дочернего элемента в базе данных firebase realtime

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-realtime-database

Вопрос:

Я новичок в Android studio и программировании и в настоящее время пытаюсь создать свое первое приложение. В firebase RTDB у меня есть несколько push-идентификаторов под одним дочерним элементом, число которых продолжает увеличиваться по мере нажатия пользователем определенных кнопок, и все они хранят только целое число. Я хочу получить данные из всех этих push-идентификаторов (или ключей, я действительно не знаю, как они на самом деле называются) под дочерним элементом, а затем суммировать целые числа и отображать результат в a textView и делать это каждый раз, когда добавляется новое поле. Как я могу это сделать? Пока я знаю только, как обычно отправлять и получать данные дочерним дочерним элементам, подобным этому, но я никогда раньше не использовал push-идентификаторы или ключи:

 String recieve = datasnapshot.child("Child").child("subchild").getText().toString();

String send = "send";

databaseReferenc.child("Child").child("sunchile").setValue(send);
  

Дерево данных в firebase выглядит следующим образом:

введите описание изображения здесь

Ответ №1:

Предполагая, что Australia это прямой дочерний элемент корня вашей базы данных Firebase Realtime, для суммирования всех этих значений, пожалуйста, используйте следующие строки кода:

 DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference australiaRef = rootRef.child("Australia");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int total = 0;
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String value = Integer.parseInt(ds.getValue(String.class));
            total  = value;
        }
        Log.d("TAG", "total: "   total);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
    }
};
australiaRef.addListenerForSingleValueEvent(valueEventListener);
  

Еще одна вещь. Поскольку вы храните числа, лучше всего хранить их как длинные значения, а не как строковые значения.