我正在尝试创建一个使用数据绑定,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" />
DatabaseDAO
//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()
}
}
答案 0 :(得分:1)
在您的视图中,只需像这样调用NumberViewModel计数
private lateinit var viewModel: NumberViewModel
如果使用片段,则将函数放在onActivityCreated
上;如果使用活动,则将函数放在onCreate
viewModel = ViewModelProviders.of(this).get(NumberViewModel::class.java)
viewmodel.count.observe(this,Observe{count->
dbView.text = count
})
如果您将 KOIN 用于绑定ViewModel和您的数据库,则在这里非常容易,有关参考KOIN