Android_Jetpack:Room与LiveData、ViewModel的结合使用

本文介绍了如何在Android应用中利用Jetpack组件Room、LiveData和ViewModel实现数据自动更新。通过在Dao文件中包装LiveData,创建ViewModel并监听数据变化,当数据库中的学生列表更新时,无需手动刷新,数据会自动推送到UI层,提高了代码的健壮性和便捷性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果不使用LiveData自动获取数据的变化,那么当每次数据库中的数据发生变化时,我们都要开启一个工作线程去重新获取数据库中的数据。
比如说,在进入页面时,要获取数据库中全部学生信息列表,一般我们会这么写:

thread{
   
   
    studentList = studentDao.getStudentList() as MutableList<Student>
    runOnUiThread {
   
   
        arrayAdapter = ArrayAdapter(this,android.R.layout.simple_list_item_1,studentList)
        listView.adapter = arrayAdapter
    }
}

首先开个工作线程去获取数据库中存储的学生列表,然后再回到UI线程中进行界面更新。这样既不方便又有可能因为忘记开线程而造成的程序出错,但是,结合LiveData及ViewModel,就可以在数据发生变化时,通过LiveData组件通知View层,实现数据的自动更新。
要想实现这个功能,我们需要对程序做如下改动:
①修改学生表Dao文件。
这里我们希望当学生列表数据发生变化时,能够收到实时通知,因此,我们将getStudentList()方法的返回对象用LiveData包装起来。

package com.example.jetpacktest.room

import androidx.lifecycle.LiveData
import androidx.room.*

@Dao
interface StudentDao {
   
   
    @Insert
    fun insertStudent(student:Student)
    @Delete
    fun deleteStudent(student: Student)
    @Update
    fun updateStudent(student: Student)
    @Query("SELECT * FROM student")
    fun getStudentList():LiveData<List<Student>>
    @Query("SELECT * FROM student WHERE id = :id")
    fun getStudentById(id:Long):Student
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值