我有以下資料表
@Entity(tableName = "day_table")
data class DayData(
@PrimaryKey(autoGenerate = true)
var dayID: Long =0L,
@ColumnInfo(name = "step_date")
var stepDate : String = "" ,
@ColumnInfo(name = "step_count")
var stepCount : Int = 0,
@ColumnInfo(name = "step_goal")
var stepGoal : Int = 0
)
在我的道中,我有
@Insert
fun insert(day: DayData)
@Update
fun update(day: DayData)
@Query("SELECT EXISTS(SELECT * FROM day_table WHERE step_date = :queryDate)")
suspend fun doesDayExist(queryDate:String) : Boolean
在 viewModel 類中,我有:
private fun initDay(){
//check if this day is in the db
var exist :Boolean = false
viewModelScope.launch {
exist = doesDayExist()
}
//if day doesnt exist in db, create it
if (!exist)
{
onNewDay()
}
}
//function to check if given date is in db
private suspend fun doesDayExist(): Boolean{
return dayDatabaseDao.doesDayExist(dts.toSimpleString(currDate.time))
}
我的插入和更新作業非常好,我檢查了資料是否按預期在資料庫中。exist即使我正在呼叫查詢,的值也不會改變,當我將其設定為 true 時,它??保持為 true,當最初設定為 false 時,它??保持為 false。我錯過了什么?
uj5u.com熱心網友回復:
您正在設定存在于協程函式中。你必須攜帶代碼到 coroutinescope。
viewModelScope.launch{
exist = doesDayExist()
if (!exist)
{
onNewDay()
}
}
uj5u.com熱心網友回復:
啟動協程會將其排隊,但當前函式會在協程在后臺啟動時繼續。您的函式在協程完成其作業之前回傳。您需要將獲得結果后要運行的代碼放入協程中。
有關異步作業的更多資訊,請參見此處。協程內部的代碼是同步的,但啟動協程是異步的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/424999.html
上一篇:迭代資料集并為行插入序列ID
下一篇:與字串的較低(空)比較不回傳行
