Android倒计时计时器崩溃和错误的值

时间:2012-05-15 16:49:02

标签: android eclipse

我有一个应用程序告诉我上学时间(:P)。我有一个文本视图,文本时间:(小时)。这应该是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));
        }
    }
}

没有对清单或布局进行任何更改。

谢谢:D

1 个答案:

答案 0 :(得分:3)

首先,请记住long是整数类型。 私人最终长间隔= 1/100; 不等于0.01;我相信它会达到零。此外,这是您希望调用onTick的频率;我相信你试图说你想要每0.01毫秒调用一次,这看起来过分了。也许你的意思是每100毫秒(每秒十次)?

您可能还想交换startB.setText行,以便在它停止时显示“Start”,当它启动时显示“stopped”

您想将毫秒转换为小时和分钟?你可以尝试这样的事情: long totalMinutes = millis / 1000/60; 长时间=毫秒/ 60; long minutes = totalMinutes - (小时* 60);

编辑: 如果您希望倒计时数(6.2代表6小时20分钟)每十分钟减少0.1,则有两种主要方法。

第一个选项是将“interval”设置为10 * 60 * 1000(十分钟内的毫秒数)。然后在onTick中,取一个浮点数(10.0或其他)并减去0.1。这可能是一种快速而肮脏的方法,如果它甚至有效,但它并不理想。

第二个是做我上面所描述的。然后,当您有小时数和分钟数时: float timeRemaining =(float)hours +(float)minutes / 100 使用String.format在textview中显示它。就像是 String.format(“%。1f%n”,timeRemaining) 只显示一个小数点显示它。

我实际上并没有尝试过这些代码 - 但是,除了我的头脑之外,这应该会给你一些提示,引导你朝着正确的方向前进。