我正在構建一個需要使用 Room 資料庫庫的應用程式。我有一件特定的事情要做 - 如果用戶輸入一些資料,我需要將其存盤在資料庫中,并更新 UI 以顯示它。像這樣的東西-
fun insertAndShowData() {
// get relevant data
// launch a coroutine to store this data in the database
// update UI
}
我的理解是我需要協程對資料庫進行操作,但我不知道該怎么做,因為我擔心協程在我更新 UI 之前可能無法完成,因此 UI 可能不會顯示正確的資料。Internet 上的示例使用runBlocking或GlobalScope.launch,但提到不建議在實際應用程式中使用這些示例。有人可以詳細告訴我該怎么做,最好用一些代碼嗎?如果我問的是非常基本的東西,我會提前道歉,因為我是 Android 協程的新手。
uj5u.com熱心網友回復:
我建議您將LiveData與 Room 一起使用,然后您無需處理“回傳”即可更新您的視圖。
你仍然需要在協程中呼叫你的 Room 函式(函式是suspend)
為了獲得良好的實踐,您可以遵循代碼實驗室(尤其是第 16 章):https ://developer.android.com/codelabs/android-room-with-a-view-kotlin#0
uj5u.com熱心網友回復:
lifecycleScope.launch {
.....
}
uj5u.com熱心網友回復:
如果“更新 ui”代碼應該在協程作業完成后才進行,你可以這樣做:
fun insertAndShowData() {
// get relevant data
lifecycleScope.launch {
withContext(Dispatchers.IO) {
//database operations here.
}
withContext(Dispatchers.Main) {
//update UI here.
}
}
}
uj5u.com熱心網友回復:
您需要使用 MutableLiveData 并在 View 上偵聽和系結該資料。在作業執行緒上,您可以使用 postValue(T value) 方法。因此,您可以在主執行緒上收聽 LiveData 來更新視圖。
https://developer.android.com/reference/android/arch/lifecycle/MutableLiveData
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/429812.html
上一篇:在C#中動態構造JSON值
