2017-06-19 9 views
0
のメンバーを更新できません

onTick()メソッドでCountDownTimer内のフィールドを更新します。しかし、フィールドは常に0です。問題の原因を知っていますか?CountDownTimer onTick()がクラス

public class Counter { 

    private static final long SECOND_MS = 1000; 
    private static final long MINUTE_MS = 60 * SECOND_MS; 
    private static final long TOTAL_TIME_MS = 5 * MINUTE_MS; 

    public long mSecondsSinceLastPick; 

    public long getSecondsSinceLastSchedulerStarted() { 
     Timber.d(String.format("get mSecondsSinceLastPick = %s", mSecondsSinceLastPick)); 
     return mSecondsSinceLastPick; 
    } 


    private CountDownTimer mCountDownTimer = new CountDownTimer(TOTAL_TIME_MS, SECOND_MS) { 

     public void onTick(long millisUntilFinished) { 
      Timber.d(String.format("onTick mSecondsSinceLastPick = %s", mSecondsSinceLastPick)); 
      mSecondsSinceLastPick = (TOTAL_TIME_MS - millisUntilFinished)/SECOND_MS; 
     } 

     public void onFinish() { 
     } 
    }; 

public void startCounting() { 
    mCountDownTimer.start(); 
} 
} 

[EDITED]は ログ出力が

06-19 15:42:57.293 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 4 
06-19 15:42:58.293 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 5 
06-19 15:42:59.299 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 6 
06-19 15:43:00.320 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 7 
06-19 15:43:01.321 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 8 
06-19 15:43:01.507 9994-9994/com.nav.survey D/GroundTruthReminderManager:22: get mSecondsSinceLastPick = 0 
06-19 15:43:02.322 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 9 
06-19 15:43:03.324 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 10 
06-19 15:43:04.325 9994-9994/com.nav.survey D/GroundTruthReminderManager:38: onTick mSecondsSinceLastPick = 11 

答えて

1

のように見える問題は、問題がであるタイマー

mCountDownTimer.start(); 

または

private CountDownTimer mCountDownTimer = new CountDownTimer(TOTAL_TIME_MS, SECOND_MS) { 

    public void onTick(long millisUntilFinished) { 
     Timber.d(String.format("onTick mSecondsSinceLastPick = %s", mSecondsSinceLastPick)); 
     mSecondsSinceLastPick = (TOTAL_TIME_MS - millisUntilFinished)/SECOND_MS; 
    } 

    public void onFinish() { 
    } 
}.start(); 
+0

私は始めましたが、このコードをコピーするのを忘れました。一般的に言えば、onTick()内にログオンすると、すべてが正しく表示されます。ゲッターでフィールドをログすると、常に0になります。 – qbait

+0

いつ取得しますか?あなたは一度だけそれを手に入れますか? –

+0

カウント中にゲッターを何回か呼びます。ログを追加しました。 – qbait

0

を開始いけないということです私のカウンターを作る。私はCounterを提供するためにDagger @ Singtonアノテーションを使用しますが、とにかくCounterの2つのインスタンスが作成され、問題が発生しました。

関連する問題