Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.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 倒计时计时器工作不正常_Java_Android_Timer_Countdowntimer - Fatal编程技术网

Java 倒计时计时器工作不正常

Java 倒计时计时器工作不正常,java,android,timer,countdowntimer,Java,Android,Timer,Countdowntimer,我有一个倒计时计时器,它获取我的时间选择器的值,并在我设置时间选择器时开始倒计时,但实际情况是它并没有倒计时到您设置时间选择器的当前时间。我的问题是如何让我的倒计时计时器倒计时到现在 这是我的密码 TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker

我有一个倒计时计时器,它获取我的时间选择器的值,并在我设置时间选择器时开始倒计时,但实际情况是它并没有倒计时到您设置时间选择器的当前时间。我的问题是如何让我的倒计时计时器倒计时到现在

这是我的密码

   TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
    @Override
    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
        timer = new CounterClass((minute * 60 * 1000) + (hourOfDay * 60 * 60 * 1000), 1000);
        long millis = (minute * 60 *1000) + (hourOfDay * 60 * 60 *1000);
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);
        timer.start();

    }
};


public class CounterClass extends CountDownTimer {

    /**
     * @param millisInFuture    The number of millis in the future from the call
     *                          to {@link #start()} until the countdown is done and {@link #onFinish()}
     *                          is called.
     * @param countDownInterval The interval along the way to receive
     *                          {@link #onTick(long)} callbacks.
     */

    public CounterClass(long millisInFuture, long countDownInterval) {
        super(millisInFuture, countDownInterval);
    }

    @TargetApi(Build.VERSION_CODES.GINGERBREAD)
    @Override
    public void onTick(long millisUntilFinished) {
        long millis = millisUntilFinished;
        String hms = String.format("%02d:%02d:%02d", TimeUnit.MILLISECONDS.toHours(millis), TimeUnit.MILLISECONDS.toMinutes(millis) - TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
                TimeUnit.MILLISECONDS.toSeconds(millis) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
        System.out.println(hms);
        textViewTime.setText(hms);
        Bundle b = new Bundle();
        b.putString(hms, hms);
        Intent mainActivity = new Intent("android.intent.action.MAIN");
        mainActivity.putExtras(b);



    }

    @Override
    public void onFinish() {

    }
}

谢谢:)

您需要获取当前时间和所选时间之间的差异,您可以使用以下方法:

public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
    Calendar c = Calendar.getInstance();
    int totalMinutesSelected = (hourOfDay * 60) + minute;
    int totalMinutesNow =(c.get(Calendar.HOUR_OF_DAY) * 60) + c.get(Calendar.MINUTE);
    int seconds = (totalMinutesSelected - totalMinutesNow) * 60;
    timer = new CounterClass(seconds, 1000);
    ...
}
反类
类中,您必须执行类似的操作

public class CounterClass extends CountDownTimer {

    Calendar c = Calendar.getInstance();

    ...

    public void onTick(long millisUntilFinished) {
        c.setTimeInMillis(System.currentTimeMillis() + millisUntilFinished);
        String hms = String.format("%02d:%02d:%02d", c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), c.get(Calendar.SECOND));
        ...
    }
}

您似乎正在将小时和分钟转换为毫秒,并将间隔设置为秒。试试这个:
timer=new-antersass((分钟*60)+(小时天数*60*60),1000)还是不行,我不知道发生了什么。如果我提前一个多小时设置时间选择器,倒计时时间就结束了。如果有人知道如何正确操作,请发布一个答案。@Leyton我编辑了我的答案,看看这是否解决了问题。好吧,现在它已经停止倒计时了。哈哈,这是peculiar@Leyton您确定已包含
textViewTime.setText(hms)吗onTick(…)
方法中的code>语句?是的,它调出一个错误的数字,然后仍然不倒计时。我真的不知道怎么了