如何在Firebase上汇总/汇总值

时间:2017-10-20 14:35:20

标签: java android firebase firebase-realtime-database

我刚刚使用Firebase添加了几个值: Screen from Firebase

我想总结这些值,并在日志中显示15。

这是我的代码:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseReference beersRef = FirebaseDatabase.getInstance().getReference("Rank");

        final ArrayList<Integer> score = new ArrayList<>();

        score.add(9);
        score.add(2);
        score.add(4);

        beersRef.push().setValue(score);


        beersRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {


            }

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

            }
        });

2 个答案:

答案 0 :(得分:1)

要实现此目的,请使用以下代码。这是简单的方法。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference rankRef = rootRef.child("Rank");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        int sum = 0;
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            int value = ds.getValue(Integer.class);
            sum =+ sum + value;
        }
        Log.d("TAG", sum);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
rankRef.addListenerForSingleValueEvent(eventListener);

您的输出将是:15

答案 1 :(得分:-1)

使用ValueEventListner,不要使用childEventListner, 按照下面的行...这里“UI和UI.class”意味着... java类名...你把getter和setter放在哪里... 这里我将int值存储在firebase中...所以需要将int值转换为String并将文本设置为text viewholder ...如果你不存储在int ..than你可以使用String

beersRef.addValueEventListener(new ValueEventListener() {`
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {``

                        int total = 0;   

                        for (DataSnapshot ds : dataSnapshot.getChildren()) {

                            UI result = ds.getValue(UI.class);
                            total = total + result.getMrp_final();

                        }

                        String tl = total + "";
                        tv_total.setText(tl);

                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {

                    }
                });

确保int total value为零... 三江源