java - Java trying to build a countdown but integer always returns 0
问题描述
I am trying to build a countdown such as "time left: 10 ".
To achieve this I tried using a TimerTask
but my problem is that the integer jumps to 0 instantly instead of counting down from 15 as I want it to and I just can't figure out why.
Any help is appreciated.
Relevant code:
public class QuizActivity extends AppCompatActivity {
private int verbleibendeZeit = 15;
private void countdown() {
countdownText.setVisibility(View.VISIBLE);
final Timer progessTimer = new Timer();
final TimerTask timerTask = new TimerTask() {
@Override
public void run() {
while (verbleibendeZeit > 0) {
verbleibendeZeit--;
}
runOnUiThread(new Runnable() {
@Override
public void run() {
countdownText.setText("Zeit übrig: " + verbleibendeZeit);
}
});
if (verbleibendeZeit == 0) {
progessTimer.cancel();
countdownText.setVisibility(View.INVISIBLE);
}
}
};
progessTimer.schedule(timerTask, 0, 1000);
}
解决方案
您的 while 循环是问题所在:
while (verbleibendeZeit > 0) {
verbleibendeZeit--;
}
将其更改为:
if (verbleibendeZeit > 0) {
verbleibendeZeit=verbleibendeZeit-1;
}
推荐阅读
- typescript - 间接返回值时,打字稿类型“字符串”不可分配给类型
- swiftui - swiftui 状态变量计数丢失了它存储的内容
- python - windows上的python权限被拒绝
- python - 从网站上的图表中抓取数据,只有将鼠标悬停在图表上才能看到
- python - Python 的“setuptools”不包括自动生成的 SWIG Python 文件
- laravel - 如何仅保护我的控制器的特定路由?
- java - java中如何获取LinkedList的头节点?
- parsing - 在 `std::string::String` 中找不到 .next() 方法
- swift - NSTokenfield 的 ChangeToken 颜色
- .net-core - 通过环境变量向 .net 控制台应用程序添加机密的最新消息是什么