我有名为 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/