[英]How can i cancel my CountDownTimer outside of my method?
假设我在下面有一个类似的类。 首先,我在公共范围内有一个CountDownTimer
,但现在为null,并且我有一个startCountDownTimer
方法来启动CountDownTimer
,在startCountDownTimer
方法中,我设置了我的countdowntimer
但是之后我想在用户单击后退按钮时取消countdowntimer
,但是您知道我在公共作用域中创建了我的变量,并且它为null,所以当我试图在方法之外取消CountDownTimer
,我得到了NullPointerException,所以如何取消CountDownTimer
? (我不想在公共范围内创建我的所有CountDownTimer
。)
public class test {
CountDownTimer countdowntimer;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
startCountDownTimer();
}
void startCountDowntimer(){
countdowntimer = new CountDownTimer(10000, 1) {
@Override
public void onTick(long millisUntilFinished) {
minText.setText(formatTimeMinutes(millisUntilFinished));
secondsText.setText(formatTimeSeconds(millisUntilFinished));
}
@Override
public void onFinish() {
Toast.makeText(this,"Timer Finished",Toast.LENGTH_LONG).show();
}
}.start();
}
@Override
public void onBackPressed() {
super.onBackPressed();
countdowntimer.cancel();
}
}
尝试使用布尔值解决此问题。
你想打电话的时候,得到一个NullPointerException countdowntimer.cancel()
和countdowntimer
未初始化。 因此,让我们这样做,除非初始化了countdowntimer
否则该行代码无法执行。
在您的countdowntimer
声明后声明一个全局布尔值。
Boolean timerOn = false;
现在,在启动计时器之后,在startCountdownTimer()
方法内部,将timerOn
布尔值设置为true
。
在onBackPressed()
方法内部,用以下代码替换代码:
@Override
public void onBackPressed() {
super.onBackPressed();
if (timerOn) {
countdowntimer.cancel();
timerOn = false;
}
}
这将确保仅在timerOn布尔值为true时才执行.cancel
方法,这仅在初始化计时器时才会发生。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.