Android jetpack room+ViewModel+liveData 数据自动更新

首页 / 文章分类 / 正文

Android jetpack room的使用_安果移不动的博客-CSDN博客

接上篇博客

我们用google推荐的这种方式

 

修改:

StudentDao
package com.anguomob.jecpack.dao  import androidx.lifecycle.LiveData import androidx.room.* import com.anguomob.jecpack.bean.Student  @Dao interface StudentDao {     @Insert     fun insertStudent(vararg student: Student)      @Delete     fun deleteStudent(vararg student: Student)      @Query("DELETE FROM student")     fun deleteAllStudent()      @Update     fun updateStudent(vararg student: Student)       @Query("SELECT * FROM student")     fun queryAllStudent(): LiveData>      @Query("SELECT * FROM student where id = :id")     fun getStudentById(id: Int): List }

 

新增 

StudentRepository类
package com.anguomob.jecpack.repository  import android.content.Context import android.os.AsyncTask import androidx.lifecycle.LiveData import com.anguomob.jecpack.bean.Student import com.anguomob.jecpack.dao.StudentDao import com.anguomob.jecpack.database.MyDataBase  class StudentRepository(var context: Context) {     private lateinit var studentDao: StudentDao      init {         val dataBase = MyDataBase.getSingle(context)         this.studentDao = dataBase.getStudentDao();     }      fun insertStudent(vararg student: Student) {         InsertStudentTask(studentDao).execute(*student)     }      fun deleteStudent(vararg student: Student) {         DeleteStudentTask(studentDao).execute(*student)     }      fun updateStudent(vararg student: Student) {         UpdateStudentTask(studentDao).execute(*student)     }      fun queryAllStudent():LiveData> {        return  studentDao.queryAllStudent()     }      fun deleteAllStudent() {         DeleteAllStudentTask().execute()     }      inner class InsertStudentTask(var studentDao: StudentDao) : AsyncTask() {         override fun doInBackground(vararg p0: Student) {             studentDao.insertStudent(*p0)         }     }       inner class UpdateStudentTask(var studentDao: StudentDao) : AsyncTask() {         override fun doInBackground(vararg p0: Student) {             studentDao.updateStudent(*p0)         }     }      inner class DeleteStudentTask(var studentDao: StudentDao) : AsyncTask() {         override fun doInBackground(vararg p0: Student) {             studentDao.deleteStudent(*p0)         }     }     inner class DeleteAllStudentTask() : AsyncTask() {         override fun doInBackground(vararg p0: Any) {             studentDao.deleteAllStudent()         }     }  }

新增

StudentViewModel
package com.anguomob.jecpack.viewmodel  import android.app.Application import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.LiveData import com.anguomob.jecpack.bean.Student import com.anguomob.jecpack.repository.StudentRepository  class StudentViewModel(application: Application) : AndroidViewModel(application) {     private lateinit var repository: StudentRepository      init {         repository = StudentRepository(application)     }      fun insertStudent(vararg student: Student) {         repository.insertStudent(*student)     }      fun deleteStudent(vararg student: Student) {         repository.deleteStudent(*student)     }      fun updateStudent(vararg student: Student) {         repository.updateStudent(*student)     }      fun queryAllStudent(): LiveData> {         return repository.queryAllStudent()     }      fun deleteAllStudent() {         repository.deleteAllStudent()     } }

修改页面代码

package com.anguomob.jecpack.activity  import android.annotation.SuppressLint import android.os.AsyncTask import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import androidx.lifecycle.ViewModelProvider import androidx.recyclerview.widget.LinearLayoutManager import com.anguomob.jecpack.R import com.anguomob.jecpack.adapter.RoomAdapter import com.anguomob.jecpack.bean.Student import com.anguomob.jecpack.dao.StudentDao import com.anguomob.jecpack.database.MyDataBase import com.anguomob.jecpack.databinding.ActivityRoomBinding import com.anguomob.jecpack.repository.StudentRepository import com.anguomob.jecpack.viewmodel.StudentViewModel  class RoomActivity : AppCompatActivity() {     private lateinit var binding: ActivityRoomBinding     private lateinit var adapter: RoomAdapter     private lateinit var viewModel: StudentViewModel      @SuppressLint("NotifyDataSetChanged")     override fun onCreate(savedInstanceState: Bundle?) {         super.onCreate(savedInstanceState)         binding = ActivityRoomBinding.inflate(layoutInflater)         setContentView(binding.root)         binding.rv.layoutManager = LinearLayoutManager(this)         adapter = RoomAdapter()         binding.rv.adapter = adapter;         viewModel =             ViewModelProvider(this, ViewModelProvider.AndroidViewModelFactory(application)).get(                 StudentViewModel::class.java             );         viewModel.queryAllStudent().observe(this) { data ->             adapter.setData(data)             adapter.notifyDataSetChanged();         }      }      fun insert(view: View) {          val s1 = Student("Jack", 20)         val s2 = Student("Jack2", 21)         viewModel.insertStudent(s1, s2)      }      fun change(view: View) {         val s1 = Student(15, "LiuAn", 27)         val s2 = Student(16, "LiuAN2", 18)         viewModel.updateStudent(s1, s2)      }      fun delete(view: View) {         val s1 = Student(20)         viewModel.deleteStudent(s1)     }      fun clear(view: View) {         viewModel.deleteAllStudent()     }   }

布局文件把查询替换为了清空

                         

 这种做法可以让数据自己展示出来。从而达到更加方便不用每次操作后手动去查询

非常的时尚