如何使用LiveData从Room数据库更新文本视图?

时间:2019-12-04 04:40:13

标签: android kotlin android-room android-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" />

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()
        }
    }

1 个答案:

答案 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