java - 如何在 firebase 中将旧数据与新数据相加

标签 java android firebase firebase-realtime-database

我有名为 poin 和 kegiatan 的表,当我将分数输入到 kegiatan 时,它也输入到 point,问题是当我将分数输入到 point 并将其与 poin 中的旧数据求和时,它会一遍又一遍地循环。我应该怎么办?顺便说一句,这就是我的数据库和输入分数的代码的样子。

凯吉坦 + 用户 ID - 分 = 分数 点 +字符串日期 -userId = 分数

reference = FirebaseDatabase.getInstance().getReference();
reference.child("poin").child(stringdate).child(nama).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        Integer previousScore = dataSnapshot.getValue(Integer.class);
        if (previousScore != null){
            Integer nita = previousScore + 2;
            dataSnapshot.getRef().setValue(nita);
        }else {
            dataSnapshot.getRef().setValue(0);
        }

        Toast.makeText(getActivity(),"Jumlah : "+nita, Toast.LENGTH_LONG).show();
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

并且我使用日期作为子项,如何每天添加新子项?感谢您的提前

最佳答案

我建议你存储所有的点(point)并将它们加起来。 示例数据库,您可以更改类似这样的内容。

 -poin
  -stringDate
   -userId
     -poinUid1
       -score : 100
     -poinUid2
       -score : 200


所以像这样的代码。您将获得总积分。如果您想读取一次数据,但如果您有需要始终读取的数据,则需要使用 addValueEventListener,我更改了 addListenerForSingleValueEvent

//Get all the sums and display. 
FirebaseDatabase.getInstance().getReference().child("poin").child(stringdate).child(userId).addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        if (dataSnapshot.exists()) {
            long sum = 0;
            for (DataSnapshot snapShot : dataSnapshot.getChildren()) {
                if (snapShot.exists()) {
                    long size = snapShot.child("score").getValue(Long.class);
                    sum += size;
                    textViewTotal.setText(String.valueOf(sum));

                }

            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {

    }
});

关于java - 如何在 firebase 中将旧数据与新数据相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59942308/

相关文章:

java - Android ListView 持久化背景

Android broadcastreceiver 创建新实例

Firebase 部署不更新 JS 文件

firebase - Next/Image + Firebase Storage 403 读取错误

angular - Firestore 从集合中获取文档 ID

java - 用于建模 View 的类

java - 应用程序响应时间与事务服务器时间

android - viewPagerIndicator :Error:Artifact 'com.viewpagerindicator:library:2.4.1:library.aar' not found

java - 为什么这个 HashMap.get 返回一个空值?

java - Eureka Client - 无法 Autowiring 客户端(spring 说定义了 2 个 bean)