首页 > 解决方案 > 从firebase实时数据库中单个子项下的多个推送ID中检索数据

问题描述

我是 android studio 和编程新手,目前正在尝试制作我的第一个应用程序。在firebase RTDB中,我在一个孩子下有多个推送ID,随着用户按下某些按钮,它们的数量会不断增加,并且它们都只存储一个整数。我想从子项下的所有这些推送 ID(或键,我真的不知道它们实际上叫什么)中检索数据,然后将整数相加并在 a 中显示结果,textView并在每次新字段时执行此操作被添加。我怎样才能做到这一点?到目前为止,我只知道如何像这样正常地向子子孩子发送和接收数据,但我以前从未使用过推送 ID 或密钥:

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

String send = "send";

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

firebase中的数据树如下:

在此处输入图像描述

标签: androidfirebasefirebase-realtime-database

解决方案


假设它Australia是您的 Firebase 实时数据库根的直接子节点,要对所有这些值求和,请使用以下代码行:

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

还有一件事。因为您要存储数字,所以最好将它们存储为长值而不是字符串值。


推荐阅读