繁体   English   中英

如何在方法之外取消CountDownTimer?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM