работает с обратным отсчетом - PullRequest
0 голосов
/ 30 апреля 2018

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

tvHeatCD - это TextView, который должен обновляться каждую секунду, чтобы показывать «5 с», если осталось 5 секунд и т. Д. reduceHeat() - метод, который должен запускаться каждые 30 секунд (показаны условия соответствия) stopHeatTimer() просто звонит handler.removeCallbacks(..) и heatTimerRunning = false

 public void checkHeatTimer() {
    RealmResults<Heat> heatList = realm.where(Heat.class).equalTo("theheat","theheat").findAll();
    ht = heatList.get(0);

    if(ht.getHeat() !=0) {
        if(!heatTimerRunning) {
                final int[] countdown = {30};
                tvHeatCD.setVisibility(View.VISIBLE);

                heatRunnable = new Runnable() {
                    @Override
                    public void run() {
                        heatTimerRunning = true;
                        if (!realm.isClosed()) {
                            countdown[0]--;
                            if(countdown[0] == 0) {
                                if (ht.getHeat() != 0) {
                                    Crashlytics.setInt("heat", ht.getHeat());
                                    reduceHeat("normal",20);
                                    stopHeatTimer();
                                    checkHeatTimer();
                                } else {
                                    Crashlytics.setInt("heat", 0);
                                    tvHeatCD.setVisibility(View.GONE);
                                    stopHeatTimer();
                                }
                            }
                            tvHeatCD.setText(countdown[0] + "s");

                            heatHandler.postDelayed(heatRunnable, 1000);
                        } else if (realm.isClosed()) {
                            recreate();
                        }

                    }
                };
                heatHandler.postDelayed(heatRunnable, 30000);
            }


    } else {
        tvHeatCD.setVisibility(View.GONE);
    }

}

Ценю любую помощь ... спасибо!

...