2013-04-11 50 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(); 
    }