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<List<Student>> @Query("SELECT * FROM student where id = :id") fun getStudentById(id: Int): List<Student> }
新增
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<List<Student>> { return studentDao.queryAllStudent() } fun deleteAllStudent() { DeleteAllStudentTask().execute() } inner class InsertStudentTask(var studentDao: StudentDao) : AsyncTask<Student, Any, Any>() { override fun doInBackground(vararg p0: Student) { studentDao.insertStudent(*p0) } } inner class UpdateStudentTask(var studentDao: StudentDao) : AsyncTask<Student, Any, Any>() { override fun doInBackground(vararg p0: Student) { studentDao.updateStudent(*p0) } } inner class DeleteStudentTask(var studentDao: StudentDao) : AsyncTask<Student, Any, Any>() { override fun doInBackground(vararg p0: Student) { studentDao.deleteStudent(*p0) } } inner class DeleteAllStudentTask() : AsyncTask<Any, Any, Any>() { 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<List<Student>> { 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() } }
布局文件把查询替换为了清空
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".activity.RoomActivity"> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.09165527" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.19015048" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.5" /> <Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="insert" android:text="增加" app:layout_constraintBottom_toTopOf="@+id/guideline5" app:layout_constraintEnd_toStartOf="@+id/guideline8" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="change" android:text="修改" app:layout_constraintBottom_toTopOf="@+id/guideline5" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline8" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/button7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="delete" android:text="删除" app:layout_constraintBottom_toTopOf="@+id/guideline7" app:layout_constraintEnd_toStartOf="@+id/guideline8" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline5" /> <Button android:id="@+id/button8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="clear" android:text="清空" app:layout_constraintBottom_toTopOf="@+id/guideline7" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/guideline8" app:layout_constraintTop_toTopOf="@+id/guideline5" /> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/guideline7" /> </androidx.constraintlayout.widget.ConstraintLayout>
这种做法可以让数据自己展示出来。从而达到更加方便不用每次操作后手动去查询
非常的时尚