Question

Hi I would like to ask something about my code coz I can't find out why is that It adds more than 1 when I declare it to add 1 everytime the timer reaches 0?

here is my code

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_timer);

    timerView = (TextView)findViewById(R.id.timer);
    energyView = (TextView)findViewById(R.id.energy);

    counter = new MyCount (10000,10);
    counter.start();


}

public String formatTime(long millis) 
{
    output = "";
    seconds = millis / 1000;
    long minutes = seconds / 60;

    seconds = seconds % 60;
    minutes = minutes % 60;

    String secondsD = String.valueOf(seconds);
    String minutesD = String.valueOf(minutes);

    if (seconds < 10)
        secondsD = "0" + seconds;
    if (minutes < 10)
        minutesD = "0" + minutes;

    output = minutesD + ":" + secondsD;

    return output;
}
public class MyCount extends CountDownTimer 
{
    Context mContext;

    public MyCount(long millisInFuture, long countDownInterval) 
    {
        super(millisInFuture, countDownInterval);
    }


    public void onTick (long millisUntilFinished) 
    {
        timerView.setText ( formatTime(millisUntilFinished));

        if ( seconds == 0 )
        {

            Toast.makeText( getApplicationContext(), "Done", Toast.LENGTH_LONG ).show();
            energy = energy + 1;
            energyView.setText(Integer.toString(energy));
        }
    }

    public void onFinish() {}

}

My energyView is always showing random number but mostly 40+ everytime my seconds reaches 0 can anyone help me? thanks in advance

Was it helpful?

Solution

The problem is that since you could enter the condition if ( seconds == 0 ) more than once. Suppose you enter the onTick with value 999 ms and then with 2ms. For both ms/1000 will give 0 (since it's an operation between longs). You should write that part taking that into consideration. As someone was suggesting in a comment you could simply get rid of the condition seconds==0 and increment your variable inside the onFinish

OTHER TIPS

Where are you declaring your seconds variable and its type?

Also, even though you are initializing with only 10000 ms (10 s), I noticed that you have the following in formatTimer:

seconds = millis/1000;

followed by

seconds = seconds % 60;

and so you will get 0 every 60 seconds if you initialize with longer than 60 s!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top