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() } }
布局文件把查询替换为了清空
这种做法可以让数据自己展示出来。从而达到更加方便不用每次操作后手动去查询
非常的时尚