Попытка выполнить изменение текста в моем текстовом представлении в повторяющееся время ежедневно в моем проекте android - PullRequest
1 голос
/ 30 мая 2020

скажем, я хотел бы автоматически изменять текст текстового просмотра в 14:00 каждый день, как мне реализовать эту функцию.

val df = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")
        val systemDat = Calendar.getInstance(Locale.JAPAN).after(df)
        if (systemDat) {
            binding.includeTokyoSession.text_one.text = "successful"
        } else {
            binding.includeTokyoSession.text_one.text = "failure"
        }

1 Ответ

0 голосов
/ 30 мая 2020

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

Во-первых, эта строка кода:

DateFormat.getTimeInstance(DateFormat.SHORT, Locale.JAPAN).parse("2:00pm")

вернет экземпляр Date с этой датой и временем в вашем часовом поясе 01-01-1970 02:00:00. Однако вам нужно получить экземпляр Date с сегодняшней датой и временем 14:00:00.

Во-вторых, эта строка кода:

Calendar.getInstance(Locale.JAPAN).after(df)

это неправильное использование Calendar::after(), и это потому, что вы можете передать в функцию только объект Calendar, чтобы получить правильный результат сравнения, иначе она всегда будет возвращать false.

В вашем случае вы ' повторная передача объекта Date.

Ниже приведена реализация функции Calendar::after().

public boolean after(Object when) {
    return when instanceof Calendar
        && compareTo((Calendar)when) > 0;
}

Если вы хотите правильно сравнить текущее время с 14:00 ( сравнивается только время сегодня ), вот модификация вашего кода:

val calendarToCompare = Calendar.getInstance(Locale.JAPAN).apply {
    set(Calendar.HOUR_OF_DAY, 14)
    set(Calendar.MINUTE, 0)
    set(Calendar.SECOND, 0)
    set(Calendar.MILLISECOND, 0)
}

val systemDat = Calendar.getInstance().after(calendarToCompare)

if (systemDat) {
    textview.text = "successful"
} else {
    textview.text = "failure"
}

Если вы хотите выполнить обновление представления с учетом жизненного цикла (например, для установки текста вашего текстового представления), вы можете проверить это gist .

...