Сбой таймера обратного отсчета Android и неправильные значения

1

У меня есть приложение, в котором рассказывается, сколько часов в школе (P). У меня есть textview с текстом Time: (Hours to go). Это должно быть 6.2, но на данный момент это 6, а затем, когда я нажимаю кнопку запуска, говорит, что школа завершена мгновенно, а затем падает. О, я хочу показать время в часах, как это (6.2 = 6 часов 20 минут). В чем может быть проблема?

Код startActivity:

package com.nieeli.timer;

import android.app.Activity;

import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class startActivity extends Activity implements OnClickListener {
    private static final String tag = "Main";
    private MalibuCountDownTimer countDownTimer;
    private long timeElapsed;
    private boolean timerHasStarted = false;
    private Button startB;
    private TextView text;
    private TextView timeElapsedView;

    private final long startTime = 22500000/3600000;
    private final long interval = 1/100;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        startB = (Button) this.findViewById(R.id.button);
        startB.setOnClickListener(this);

        text = (TextView) this.findViewById(R.id.timer);
        timeElapsedView = (TextView) this.findViewById(R.id.timeElapsed);
        countDownTimer = new MalibuCountDownTimer(startTime, interval);
        text.setText(text.getText() + String.valueOf(startTime));
    }

    public void onClick(View v) {
        if (!timerHasStarted) {
            countDownTimer.start();
            timerHasStarted = true;
            startB.setText("Start");
        } else {

            countDownTimer.cancel();
            timerHasStarted = false;
            startB.setText("Stop and Reset");
        }
    }

    // CountDownTimer class
    public class MalibuCountDownTimer extends CountDownTimer {

        public MalibuCountDownTimer(long startTime, long interval) {
            super(startTime, interval);
        }

        @Override
        public void onFinish() {
            text.setText("School Finished!");
            timeElapsedView.setText("Time Passed: "
                    + String.valueOf(startTime));
        }

        @Override
        public void onTick(long millisUntilFinished) {
            text.setText("Time remain:" + millisUntilFinished);
            timeElapsed = startTime - millisUntilFinished;
            timeElapsedView.setText("Time Left: "
                    + String.valueOf(timeElapsed));
        }
    }
}

Не внесены изменения в манифест или макет.

Спасибо

  • 2
    опубликуйте свой логкат
  • 0
    Вы пытаетесь после комментирования timeElapsedView.setText («Время прошло:» + String.valueOf (startTime)); линия?
Показать ещё 1 комментарий
Теги:

1 ответ

3
Лучший ответ

Во-первых, помните, что long является целым типом. частный конечный длинный интервал = 1/100; Не эквивалентен 0,01; Я считаю, что это сработает до нуля. Кроме того, это то, как часто вы хотите, чтобы ваш onTick был вызван; Я считаю, что вы пытаетесь сказать, что хотите, чтобы его вызывали каждые 0,01 миллисекунды, что кажется чрезмерным. Возможно, вы имели в виду каждые 100 миллисекунд (десять раз в секунду)?

Вы также можете поменять местами строки startB.setText так, чтобы, когда он остановлен, он показывает "Пуск", и когда он запускается, он показывает "остановлен",

Вы хотите конвертировать миллисекунды в часы и минуты? Вы можете попробовать что-то вроде этого: long totalMinutes = millis/1000/60; длинные часы = миллис /60; длинные минуты = totalMinutes - (часы * 60);

EDIT: Есть два основных подхода, если вы хотите, чтобы ваш номер обратного отсчета (6.2, представляющий 6 часов и 20 минут) уменьшался на.1 каждые десять минут.

Первый вариант - установить "интервал" на 10 * 60 * 1000 (количество миллисекунд за десять минут). Затем в onTick возьмите число с плавающей точкой (10.0 или другое) и уменьшите на 0,1. Это может быть быстрый и грязный метод, если он даже работает, но он не идеален.

Второй - сделать то, что я описал выше. Затем, когда у вас есть количество часов и количество минут: float timeRemaining = (float) hours + (float) minutes/100 используют String.format для отображения его в текстовом виде. Что-то вроде String.format("%. 1f% n", timeRemaining), чтобы показать его только с одной десятичной точкой.

Я на самом деле не пробовал код, но, с головы до ног, это должно дать вам несколько советов, которые помогут вам в правильном направлении.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню