嗨我想问一些关于我的代码的问题因为我无法找到为什么当我声明每次定时器达到0时加1时它会增加1以上?
这是我的代码
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_timer);
timerView = (TextView)findViewById(R.id.timer);
energyView = (TextView)findViewById(R.id.energy);
counter = new MyCount (10000,10);
counter.start();
}
public String formatTime(long millis)
{
output = "";
seconds = millis / 1000;
long minutes = seconds / 60;
seconds = seconds % 60;
minutes = minutes % 60;
String secondsD = String.valueOf(seconds);
String minutesD = String.valueOf(minutes);
if (seconds < 10)
secondsD = "0" + seconds;
if (minutes < 10)
minutesD = "0" + minutes;
output = minutesD + ":" + secondsD;
return output;
}
public class MyCount extends CountDownTimer
{
Context mContext;
public MyCount(long millisInFuture, long countDownInterval)
{
super(millisInFuture, countDownInterval);
}
public void onTick (long millisUntilFinished)
{
timerView.setText ( formatTime(millisUntilFinished));
if ( seconds == 0 )
{
Toast.makeText( getApplicationContext(), "Done", Toast.LENGTH_LONG ).show();
energy = energy + 1;
energyView.setText(Integer.toString(energy));
}
}
public void onFinish() {}
}
我的energyView始终显示随机数,但每次我的秒数达到0时大多数都是40以上,任何人都可以帮助我吗?提前谢谢
答案 0 :(得分:0)
问题是因为你可以多次输入条件if(seconds == 0)。 假设您输入值为999毫秒的onTick,然后输入2毫秒。对于ms / 1000都将给出0(因为它是longs之间的操作)。 您应该考虑到这一点。 正如有人在评论中建议你可以简单地摆脱条件秒== 0并在onFinish中增加你的变量
答案 1 :(得分:0)
你在哪里声明你的秒变量及其类型?
此外,即使您只用10000毫秒(10秒)进行初始化,我注意到您在formatTimer中有以下内容:
seconds = millis/1000;
接着是
seconds = seconds % 60;
所以如果你的初始化时间超过60秒,你将每60秒得到0!