2012-02-09 4 views
1

Я пытаюсь создать некоторые события, основанные на времени, используя хронометр. В приведенном ниже коде успешно отображается тост после 5 секунд запуска хронометра, но мне нужно, чтобы тост отображался в 5/10/20 секунд.if statement using onchronometerticklistener

Я пробовал использовать if (elapsedTime == 5000 || elapsedTime == 10000), но при использовании == не отображается тост.

Любые идеи?

Chronometer.OnChronometerTickListener mChronoListener = new OnChronometerTickListener() { // listens to journey timer to initiate time based events 

    public void onChronometerTick(Chronometer arg0) { 

     long elapsedTime = SystemClock.elapsedRealtime() - arg0.getBase(); 

     if (elapsedTime > 5000) 
     { 
      Toast.makeText(SafeDrive3Activity.this, "HOUR PASSED",  Toast.LENGTH_LONG).show(); 

     } 

    } 
}; 
+0

Это кажется маловероятным, что ваш 'elapsedTime' будет точно делится на 1000 миллисекунд, основываясь на том, что устройство, которое может ввести задержку при вызове 'onChronometerTick (...)'. Другими словами, прошедшее время может составлять 5001 мс или 5020 мс в зависимости от других обстоятельств, задерживающих вызов слушателя. Использование '==' для точного значения не будет работать в этом случае - разделите на 1000, затем сравните с помощью '== 5' или' == 10'. Еще лучше, разделите на 1000, затем посмотрите, будет ли результат точно делиться на 5 или 10 с использованием модуля ('' '' '' 'оператора ''). – Squonk

+0

Вы правы, спасибо! – Rob

ответ

0

попробовать что-то вроде этого (если вы хотите сохранить ее каждые 10 секунд после этого):

Chronometer.OnChronometerTickListener mChronoListener = new OnChronometerTickListener() { 
    // listens to journey timer to initiate time based events 
    int currentNeededTime = 5000; 
    public void onChronometerTick(Chronometer arg0) { 

     long elapsedTime = SystemClock.elapsedRealtime() - arg0.getBase(); 

     if (elapsedTime > currentNeededTime) 
     { 
      Toast.makeText(SafeDrive3Activity.this, "HOUR PASSED",  Toast.LENGTH_LONG).show(); 
      currentNeededTime += currentNeededTime == 5000 ? 5000 : 10000; 
     } 
    } 
}; 
+0

Спасибо, что работает :) – Rob

+0

Фантастический, удачи. –