Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Firebase查询下Android内部倒计时两次_Java_Android_Firebase_Firebase Realtime Database_Countdown - Fatal编程技术网

Java Firebase查询下Android内部倒计时两次

Java Firebase查询下Android内部倒计时两次,java,android,firebase,firebase-realtime-database,countdown,Java,Android,Firebase,Firebase Realtime Database,Countdown,我试图在Android studio中实现一个简单的倒计时,它根据从Firebase数据库读取的时间触发。在我的主要活动中,我寻找某种价值,这种价值有时存在,有时不存在。在casi中,它存在,倒计时应该触发 // Search the database Query query = mRef .child(getString(R.string.dbname_reservations)) .orderByKey() .e

我试图在Android studio中实现一个简单的倒计时,它根据从Firebase数据库读取的时间触发。在我的主要活动中,我寻找某种价值,这种价值有时存在,有时不存在。在casi中,它存在,倒计时应该触发

// 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));