Garmaine Staff asked 2 years ago

I created a button that counts clicks and created a timer for 5 seconds. After the 5 seconds, I want to find the clicks per second (cps) by taking counter and dividing it by 5. However, the problem is that after I reset counter to 0, the code for finding cps still runs in the onFinish method and makes the cps also to 0.

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mtextViewCountDown = (TextView) findViewById(R.id.text_view_countdown);
        btnClick = (Button) findViewById(R.id.button2);
        displayCPS = (TextView) findViewById(R.id.cps);

        btnClick.setOnClickListener(new View.OnClickListener() {
            @Override

            public void onClick(View v) {

                startTimer();
                counter++;
                btnClick.setText(Integer.toString(counter));

            }
        });
    }
    public void startTimer(){
        countDownTimer = new CountDownTimer(timeLeft,1000){
            public void onTick(long l){

                timeLeft = l;
                updateTimer();
            }
            public void onFinish() {

                cps = counter / 5;
                System.out.println(cps);
                displayCPS.setText("CPS: " + Double.toString(cps));


            }
        }.start();
    }
    public void updateTimer(){
        int minutes = 0;
        int seconds = (int) timeLeft / 1000;
        String timeLeftFormatted = String.format(Locale.getDefault(),"%02d:%02d", minutes, seconds);
        mtextViewCountDown.setText(timeLeftFormatted);

    }
    public void resetTimer(){
        counter = 0;
        btnClick.setText(Integer.toString(0));
        timeLeft = 5000;

    }

I tried to debug it and print out the cps in console.

I/System.out: 5.0
I/System.out: 0.0
I/chatty: uid=10088(com.example.cpspractice) identical 14 lines
I/System.out: 0.0
I/System.out: 0.0
I/chatty: uid=10088(com.example.cpspractice) identical 10 lines
I/System.out: 0.0

It seems to be like onFinish runs multiple times. Do you guys have any idea on how to make it only run once?