在Firebase数据库中比较当前日期

时间:2019-07-05 19:06:38

标签: android firebase-realtime-database

我正在尝试保存当天从应用程序(我正在开发)中发送的总反馈。如果没有反馈,我想在当前日期输入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);}

1 个答案:

答案 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);
    }
});