Получить метаданные BQ для нескольких таблиц с датами

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

Apperantly CountDownTimer не очень точен, поэтому я решил реализовать еще один таймер обратного отсчета времени, используя java.util.Timer:

public abstract class PreciseCountdown extends Timer {
    private long totalTime, interval, delay;
    private TimerTask task;
    private long startTime = -1;
    private boolean restart = false, wasCancelled = false, wasStarted = false;

    public PreciseCountdown(long totalTime, long interval) {
        this(totalTime, interval, 0);
    }

    public PreciseCountdown(long totalTime, long interval, long delay) {
        super("PreciseCountdown", true);
        this.delay = delay;
        this.interval = interval;
        this.totalTime = totalTime;
        this.task = getTask(totalTime);
    }

    public void start() {
        wasStarted = true;
        this.scheduleAtFixedRate(task, delay, interval);
    }

    public void restart() {
        if(!wasStarted) {
            start();
        }
        else if(wasCancelled) {
            wasCancelled = false;
            this.task = getTask(totalTime);
            start();
        }
        else{
            this.restart = true;
        }
    }

    public void stop() {
        this.wasCancelled = true;
        this.task.cancel();
    }

    // Call this when there's no further use for this timer
    public void dispose(){
        cancel();
        purge();
    }

    private TimerTask getTask(final long totalTime) {
        return new TimerTask() {

            @Override
            public void run() {
                long timeLeft;
                if (startTime < 0 || restart) {
                    startTime = scheduledExecutionTime();
                    timeLeft = totalTime;
                    restart = false;
                } else {
                    timeLeft = totalTime - (scheduledExecutionTime() - startTime);

                    if (timeLeft <= 0) {
                        this.cancel();
                        startTime = -1;
                        onFinished();
                        return;
                    }
                }

                onTick(timeLeft);
            }
        };
    }

    public abstract void onTick(long timeLeft);
    public abstract void onFinished();
}

Пример использования:

this.countDown = new PreciseCountdown(totalTime, interval, delay) {
    @Override
    public void onTick(long timeLeft) {
        // update..
        // note that this runs on a different thread, so to update any GUI components you need to use Activity.runOnUiThread()
    }

    @Override
    public void onFinished() {
        onTick(0); // when the timer finishes onTick isn't called
        // count down is finished
    }
};

, чтобы начать обратный отсчет, просто вызовите countDown.start (). countDown.stop () останавливает countDown, который может быть перезапущен с использованием countDown.restart ().

Надеюсь, что это любая помощь для любого в будущем.

0
задан Neha0908 5 March 2019 в 06:45
поделиться

1 ответ

есть способ получить метаданные для нескольких дат

Да, вы можете запросить __TABLES__, используя LIKE, следующим образом:

SELECT table_id , row_count FROM `project.dataset.__TABLES__`
WHERE table_id like 'table%'
0
ответ дан Tamir Klein 5 March 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: