如何使用 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