2013-04-11 53 views
1

我在Android上玩了CountDownTimer,我陷入了一种两难的境地。在我的代码,我有以下几点:查找CountDownTimer是否已完成?

public class mCountDownTimer extends CountDownTimer{ 
    protected boolean hasFinished = false; 
    public mCountDownTimer(long millisInFuture, long countDownInterval) { 
     super(millisInFuture, countDownInterval); 
     // TODO Auto-generated constructor stub 
    } 
    public void onFinish(){ 
     hasFinished = true; 
    } 
    @Override 
    public void onTick(long millisUntilFinished) { 
     // TODO Auto-generated method stub 

    } 
} 

基本上我想看看我的CountDownTimer已经完成。但在函数中,我想调用它,我有一些代码:

public void function(){ 
public boolean finished = false; 
    if(interrupted) 
     countDownTimer.cancel(); 
    if(temporaryCountHolder == false){ 
     countDownTimer.start(); 
     interrupted = true; 
    } 
} 

我该如何判断我的计时器是否已完成?我想要实现的东西,说:

if(countDownTimer.hasFinished == true){ 
     Time now = new Time(); //finds the current time 
     now.setToNow(); 
     String lsNow = now.format("%m-%d-%Y %I:%M:%S"); 
     lsNow += " just Started\n"; 
     try { 
      dumpToFile("StepsChanged", lsNow); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 

但如果我把发言之后

if(temporaryCountHolder == false) 

语句,那么if语句与hasFinished的计算结果始终是假的。我怎样才能得到它,以便当且仅当定时器完成时才能记录时间?

+0

你能告诉你究竟是如何使用'如果(countDownTimer.hasFinished ==真)后''如果(temporaryCountHolder ==假)'? – Vinay 2013-04-11 06:25:38

+0

@JJPA我刚刚添加了我如何使用countDownTimer.hasFinished ==真正的方法 – user1567909 2013-04-11 06:27:57

+0

它是否后来'if(temporaryCountHolder == false){countDownTimer.start(); interrupted = true;}'或在此语句中? – Vinay 2013-04-11 06:30:05

回答

0

根据您的意见,您得到错误值的原因是因为您在计时器停止之前正在执行语句。

你可以像下面,

@Override 
public void onFinish(){ 
     hasFinished = true; 
     Time now = new Time(); //finds the current time 
     now.setToNow(); 
     String lsNow = now.format("%m-%d-%Y %I:%M:%S"); 
     lsNow += " just Started\n"; 
     try { 
      dumpToFile("StepsChanged", lsNow); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 

为了简单地记录时间你可以移动这些方法countdowntimer类的onFinish方法。我不知道dumpToFile如果它是另一个类的方法,你可以使它成为一个静态方法,并使用它,甚至一些合适的替代方法。希望这可以帮助。

+0

哇谢谢!那只是一个问题。当CountDownTimer完成时,是否自动调用onFinish而不调用它? – user1567909 2013-04-11 06:54:09

+0

是的,当countdowntimer完成时,'onFinish'方法被自动调用为callback。 'onFinish' - >'当时间到了时触发回调,按照文档[这里](http://developer.android.com/reference/android/os/CountDownTimer.html) – Vinay 2013-04-11 06:57:06

+0

太棒了!非常感谢你的帮助。对此,我真的非常感激! – user1567909 2013-04-12 00:22:16

0

您需要取消CountDownTimer在OnFinsh

@Override 
    public void onFinish() { 
     Log.v(TAG, "On Finish"); 
     Intent intent = new Intent(TIME_OUT); 
     intent.putExtra("dialog", "timeout"); 
     sendBroadcast(intent); 
     countDownTimer.cancel(); 
    }