尝试在我的 android 项目中每天重复执行文本视图中的文本更改

Trying to perform a text change in my textview at a reoccurring time on daily basis in my android project

let say i will like to automatically change my textview text at 02:00pm everyday how do I implement this functionality.

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"
        }

我想您想在特定时间后更改 TextView 的文本,但您在比较时似乎不知道日期,并且您的代码中有几个错误。

首先,这行代码:

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

将 return 一个 Date 具有您当地时区 01-01-1970 02:00:00 日期和时间的实例。但是,您需要获取具有今天日期和时间 14:00:00.

Date 实例

二、这行代码:

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

这是Calendar::after()函数的错误用法,因为你只能传递一个Calendar对象给函数才能得到正确的比较结果,否则它总是return假的。

在您的情况下,您正在传递一个 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