如何使用 LiveData 从 Room 数据库更新文本视图?
How to update a text view from a Room database using LiveData?
我正在尝试创建一个使用数据绑定、Room 数据库和实时数据的简单计数器应用程序。当前,当用户按下加号按钮时,它会更新本地实时数据值,然后更新数据库编号。当我尝试附加数据库 dbCount 中的值时,出现数据绑定错误。如何从数据库中获取实时数据到文本视图?
注意:我是 android 开发的新手,所以我仍在学习这些概念。
Project Repository
fragment_number.xml
<TextView
android:id="@+id/dbView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{sleepTrackerViewModel.dbCount}"
app:layout_constraintBottom_toTopOf="@+id/display"
app:layout_constraintEnd_toEndOf="@+id/display"
app:layout_constraintStart_toStartOf="@+id/display" />
数据库DAO
//Selects first entry
@Query("SELECT number from daily_sleep_quality_table WHERE nightId = 1")
fun getFirst(): LiveData<Int>
NumberViewModel
private val dbCount = database.getFirst()
//Holds the count
private val _count = MutableLiveData<Int>()
val count: LiveData<Int>
get() = _count
fun plus(){
uiScope.launch{
//adds to current count
_count.value = (_count.value)?.plus(1)
//Gets entry with ID 1 and updates number
withContext(Dispatchers.IO) {
val currentNum = database.get(1) ?: return@withContext
currentNum.number = _count.value!!
database.update(currentNum )
}
number.value = getTonightFromDatabase()
}
}
在您看来,只需像这样调用 NumberViewModel 计数
private lateinit var viewModel: NumberViewModel
如果您使用片段,请将函数放在 onActivityCreated
如果您使用 activity,请将其放在 onCreate
viewModel = ViewModelProviders.of(this).get(NumberViewModel::class.java)
viewmodel.count.observe(this,Observe{count->
dbView.text = count
})
如果您在此处应用 KOIN 来绑定 ViewModel 和您的数据库,这将非常容易 KOIN
我正在尝试创建一个使用数据绑定、Room 数据库和实时数据的简单计数器应用程序。当前,当用户按下加号按钮时,它会更新本地实时数据值,然后更新数据库编号。当我尝试附加数据库 dbCount 中的值时,出现数据绑定错误。如何从数据库中获取实时数据到文本视图?
注意:我是 android 开发的新手,所以我仍在学习这些概念。 Project Repository
fragment_number.xml
<TextView
android:id="@+id/dbView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{sleepTrackerViewModel.dbCount}"
app:layout_constraintBottom_toTopOf="@+id/display"
app:layout_constraintEnd_toEndOf="@+id/display"
app:layout_constraintStart_toStartOf="@+id/display" />
数据库DAO
//Selects first entry
@Query("SELECT number from daily_sleep_quality_table WHERE nightId = 1")
fun getFirst(): LiveData<Int>
NumberViewModel
private val dbCount = database.getFirst()
//Holds the count
private val _count = MutableLiveData<Int>()
val count: LiveData<Int>
get() = _count
fun plus(){
uiScope.launch{
//adds to current count
_count.value = (_count.value)?.plus(1)
//Gets entry with ID 1 and updates number
withContext(Dispatchers.IO) {
val currentNum = database.get(1) ?: return@withContext
currentNum.number = _count.value!!
database.update(currentNum )
}
number.value = getTonightFromDatabase()
}
}
在您看来,只需像这样调用 NumberViewModel 计数
private lateinit var viewModel: NumberViewModel
如果您使用片段,请将函数放在 onActivityCreated
如果您使用 activity,请将其放在 onCreate
viewModel = ViewModelProviders.of(this).get(NumberViewModel::class.java)
viewmodel.count.observe(this,Observe{count->
dbView.text = count
})
如果您在此处应用 KOIN 来绑定 ViewModel 和您的数据库,这将非常容易 KOIN