android内部倒计时在firebase查询下两次

kiz8lqtg  于 2021-07-12  发布在  Java
关注(0)|答案(0)|浏览(172)

我试图在androidstudio中实现一个简单的倒计时计时器,它根据从firebase数据库读取的时间触发。在我的主要活动中,我寻找某种价值,这种价值有时存在,有时不存在。如果它存在,倒计时就会触发。

// Search the database
    Query query = mRef
            .child(getString(R.string.dbname_reservations))
            .orderByKey()
            .equalTo(reservation_id);
    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull final DataSnapshot snapshot) {
            if (snapshot.exists()) {

                countDownTimer = new CountDownTimer(40000, 1000) {
                    public void onTick(long millisUntilFinished) {
                        mReservationCommerceName.setText(millisUntilFinished + "");
                    }

                    public void onFinish() {
                        mReservationCommerceName.setText("DONE");
                    }
                }.start();
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {
        }
    });

初始时间只是一个样本时间,用来说明它是如何工作的。计时器启动时,每秒滴答两次。当我实现了计算初始时间的方法(简单的减法)和显示所需时间的方法时,它每秒钟执行两次操作。在我的display方法中,时间以毫秒为单位,时间以分钟为单位,每秒钟我就会在textview中得到两个不同的文本:一个是正确的显示(分钟),另一个是时间以毫秒为单位。
我就是这样做的:

private String displayTimeLeft(long timeLeft) {
    double hour, minute, second;
    hour = Math.floor(timeLeft / 1000f / 60f / 60f);
    minute = Math.floor(timeLeft / 1000f / 60f);
    second = Math.floor(timeLeft / 1000f);
    DecimalFormat precision = new DecimalFormat("0");
    if (hour > 0) {
        return precision.format(hour) + ":" + precision.format(minute);
    } else if (minute == 0) {
        if (second < 10) {
            return precision.format(minute) + ":0" + precision.format(second);
        } else {
            return precision.format(minute) + ":" + precision.format(second);
        }
    } else {
        return precision.format(minute);
    }
}

我将文本设置为:

mReservationCommerceName.setText(displayTimeLeft(millisUntilFinished));

我确信这与它在查询中这一事实有关,因为我在代码的其他部分实现了倒计时,而且它工作正常。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题