我试图在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));
我确信这与它在查询中这一事实有关,因为我在代码的其他部分实现了倒计时,而且它工作正常。
暂无答案!
目前还没有任何答案,快来回答吧!