CountDownTimer не останавливается и не перезапускается - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь настроить систему dailyReward и почти закончил, но у меня есть проблемы с CountDownTimer. Поэтому, когда таймер достигает 0 и вы нажимаете на награду за получение награды, вы получаете награду, и таймеры должны снова начать обратный отсчет. Но проблема в том; он считает Минус вверх, если вы перезапустите приложение, оно вернется в нормальное состояние.

Это метод обратного отсчета, что бы я ни поместил в onFini sh () ничего не происходит

    public void loadDailyRewardCountDown() {

        CountDown = true;
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        formatter.setLenient(false);

        String endTime = getDailyRewardsDate;

        Date endDate;
        Date startDate;
        long milliseconds = 0;
        long millisec = 0;
        try {
            endDate = formatter.parse(endTime);
            startDate = formatter.parse(curDate);
            millisec = startDate.getTime();
            milliseconds = endDate.getTime();

        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        long startTime = millisec;
        mCountDownTimer = new CountDownTimer(milliseconds, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {

                //startTime = startTime - 1;
                Long serverUptimeSeconds =
                        (millisUntilFinished - startTime) / 1000;

                //String daysLeft = String.format("%d", serverUptimeSeconds / 86400);
                //txtViewDays.setText(daysLeft);

                String hoursLeft = String.format("%d", (serverUptimeSeconds % 86400) / 3600);
                if (hoursLeft.equals("0")) {
                    tv_hour.setVisibility(View.GONE);
                }else {
                    tv_hour.setText(hoursLeft + " H");
                }

                String minutesLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) / 60);
                if (minutesLeft.equals("0")) {
                    tv_minutes.setVisibility(View.GONE);
                } else if (hoursLeft.equals("0")) {
                    tv_minutes.setText(minutesLeft + " Min");
                } else {
                    tv_minutes.setText(minutesLeft + " M");
                }

                String secondsLeft = String.format("%d", ((serverUptimeSeconds % 86400) % 3600) % 60);
                if (hoursLeft.equals("0") && minutesLeft.equals("0")) {
                    tv_seconds.setText(secondsLeft + " Seconds");
                } else {
                    tv_seconds.setText(secondsLeft);
                }
                if (hoursLeft.equals("0") && minutesLeft.equals("0") && secondsLeft.equals("0")){
                    Toast.makeText(DashBoardActivity.this, "Finished", Toast.LENGTH_SHORT).show();
                    GetCurDate();
                    mCountDownTimer.cancel();
                    layout_countdown.setVisibility(View.GONE);
                    btn_claim_daily_reward.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onFinish() {

            }
        }.start();
    }

и в кнопке, которую вы должны нажать, чтобы получить награду, я просто звоню логические значения loadDailyRewardCountDown и CountDown равны false.

1 Ответ

0 голосов
/ 17 июня 2020

Более простой и удобный в обслуживании подход - сэкономить время, которое пользователь впервые запускает ваше приложение в Shared Preferences, а затем каждый раз, когда пользователь запускает приложение снова, проверяется, есть ли в течение 24 часов прошло с момента последнего запуска, и если это так, новое время сохраняется.

Затем вы можете использовать свой CountDownTimer, если пользователь использует приложение в течение 24 часов, и просто остановите таймер после того, как он имеет право требовать вознаграждение, потому что пользователь не будет использовать приложение в течение 24 часов подряд.

...