Android room Android Kotlin Room codelabs中getTonightFromDatabase()的用途是什么?

Android room Android Kotlin Room codelabs中getTonightFromDatabase()的用途是什么?,android-room,kotlin-coroutines,Android Room,Kotlin Coroutines,我试图理解Android Kotlin基础中的codelab。类SleepTrackerViewModel包括(由我添加注释): private-var=MutableLiveData() private suspend fun getTonightFromDatabase():SleepNight?{ var night=database.getTonight()//这将获取最近的夜晚 //如果今晚已完成(其结束时间已设置),则返回null。 如果(夜间?.endTimeMilli!=夜间?.

我试图理解Android Kotlin基础中的codelab。类
SleepTrackerViewModel
包括(由我添加注释):

private-var=MutableLiveData()
private suspend fun getTonightFromDatabase():SleepNight?{
var night=database.getTonight()//这将获取最近的夜晚
//如果今晚已完成(其结束时间已设置),则返回null。
如果(夜间?.endTimeMilli!=夜间?.startTimeMilli){
夜=零
}
返回之夜
}
有趣的开始跟踪(){
viewModelScope.launch{
瓦尔·纽奈特=睡眠之夜
插入(纽夜)
今晚。value=getTonightFromDatabase()
}
}
趣味在线追踪(){
viewModelScope.launch{
val oldNight=今晚。价值?:return@launch
oldNight.endTimeMilli=System.currentTimeMillis()
更新(旧夜)
}
}
我不明白为什么需要只从
onStartTracking()
调用的方法
getTonightFromDatabase()
onStartTracking()
中的最后一条语句似乎可以替换为:

tonight.value = newNight

我也不明白为什么需要
getTonightFromDatabase()
中的条件。原因之一是
SleepNight
数据类中的
nightId
是由SQL自动生成的

如果代码今晚执行
nightly.value=newNight
,那么
nightlid
将与数据库中的代码不同。这将导致
update
调用
onStopTracking
在错误的夜晚结束(
update

还请注意,方法
getTonightFromDatabase
是从
SleepNightViewModel
中调用的:

private-var=MutableLiveData()
初始化{
初始化为夜()
}
私人娱乐初始设置ToNight(){
viewModelScope.launch{
今晚。value=getTonightFromDatabase()
}
}
当应用程序重新启动时,将调用数据库中的
getTonightFromDatabase
来设置今晚的实例变量
latestNight
)。如果最近的一晚已完成,则完整性检查将确保返回
null
,以防止修改条目