Android room Android Kotlin Room codelabs中getTonightFromDatabase()的用途是什么?
我试图理解Android Kotlin基础中的codelab。类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!=夜间?.
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
,以防止修改条目