我正在尝试保存当天从应用程序(我正在开发)中发送的总反馈。如果没有反馈,我想在当前日期输入0。如果有任何我想增加它。稍后将使用这些数据来填充图形。
我面临的问题是它始终保存为“ 0”,这意味着查询无法正常工作,或者我可能以错误的方式执行此操作。你能帮上什么忙吗?
final DatabaseReference TodayLearningReports =
firebaseDatabase.getReference("xyz/TotalLearningBehaviourReports");
Query findtotal=TodayLearningReports.orderByChild(nowDate)
.equalTo(nowDate);
findtotal.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot
dataSnapshot) {
if (dataSnapshot.exists())
totalLearningFeedbackToday=dataSnapshot.getValue().toString();
}
@Override
public void onCancelled(@NonNull DatabaseError
databaseError) {
}
});
if (totalLearningFeedbackToday.isEmpty())
{
TodayLearningReports.child(nowDate).setValue("0");
}
else
{
int newTotal=Integer.parseInt(totalLearningFeedbackToday);
TodayLearningReports.child(nowDate).setValue(++newTotal);}
答案 0 :(得分:0)
要基于节点的现有值将新值写入节点,请使用Firebase Database transaction。在您的情况下,看起来像这样:
TodayLearningReports.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData mutableData) {
Long value = mutableData.getValue(Long.class);
if (value == null) {
mutableData.setValue(1);
}
else {
mutableData.setValue(value + 1);
}
return Transaction.success(mutableData);
}
@Override
public void onComplete(DatabaseError databaseError, boolean b,
DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "runTransaction:onComplete:" + databaseError);
}
});