天天看点

Room的使用

  1. 添加插件
  2. 添加依赖
    implementation "androidx.room:room-runtime:2.3.0"
    kapt "androidx.room:room-compiler:2.3.0"
               
  3. 布局
    Room的使用
    <?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=".MainActivity">
    
        <EditText
            android:id="@+id/salary_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="numberDecimal"
            app:layout_constraintBaseline_toBaselineOf="@+id/salary_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/guideline3" />
    
        <Button
            android:id="@+id/add_user_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="添加用户"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/salary_edit"
            app:layout_constraintVertical_bias="0.051" />
    
        <TextView
            android:id="@+id/name_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请输入名称:"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="@+id/age_text"
            app:layout_constraintEnd_toStartOf="@+id/guideline2"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.11" />
    
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="123dp" />
    
        <TextView
            android:id="@+id/age_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="请输入年龄:"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/guideline2"
            app:layout_constraintTop_toBottomOf="@+id/name_text"
            app:layout_constraintVertical_bias="0.058" />
    
        <TextView
            android:id="@+id/salary_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="72dp"
            android:text="请输入薪水:"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/guideline2"
            app:layout_constraintHorizontal_bias="1.0"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/age_text"
            app:layout_constraintVertical_bias="0.066" />
    
        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_begin="132dp" />
    
        <EditText
            android:id="@+id/name_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="textPersonName"
            app:layout_constraintBaseline_toBaselineOf="@+id/name_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/guideline3" />
    
        <EditText
            android:id="@+id/age_edit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ems="10"
            android:inputType="number"
            app:layout_constraintBaseline_toBaselineOf="@+id/age_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/guideline3" />
    
        <Button
            android:id="@+id/query_user_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="查询用户"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/add_user_button"
            app:layout_constraintVertical_bias="0.021" />
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintVertical_bias="0.04"
            app:layout_constraintTop_toBottomOf="@+id/query_user_button">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/users_text"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"/>
            </LinearLayout>
        </ScrollView>
    
    </androidx.constraintlayout.widget.ConstraintLayout>
               
  4. 代码
    @Entity
    data class User(
        @PrimaryKey(autoGenerate = true)
        val uid: Int?,
    
        @ColumnInfo(name = "user_name")
        val name: String,
    
        val age: Int,
        val salary: Float
    )
               
    @Dao
    interface UserDao {	
        @Query("SELECT * FROM user")
        fun getAll(): List<User>
    
        @Query("SELECT * FROM user WHERE uid IN (:userIds)")
        fun loadAllByIds(userIds: IntArray): List<User>
    
        @Query("SELECT * FROM user WHERE user_name LIKE :name LIMIT 1")
        fun findByName(name: String): User
    
        @Insert
        fun insertAll(vararg users: User)
    
        @Delete
        fun delete(user: User)
    }
               
    @Database(entities = [User::class], version = 1)
    abstract class AppDatabase : RoomDatabase() {
        abstract fun userDao(): UserDao
    }
               
    class MainActivity : AppCompatActivity() {
    
        private lateinit var database: AppDatabase
        private lateinit var userDao: UserDao
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            findViewById<Button>(R.id.add_user_button).setOnClickListener(::addUser)
            findViewById<Button>(R.id.query_user_button).setOnClickListener(::queryUser)
    
            database = Room.databaseBuilder(applicationContext, AppDatabase::class.java, "mydb.sqlite").build()
            userDao = database.userDao()
    
        }
    
        fun addUser(view: View) {
            val name = findViewById<EditText>(R.id.name_edit).text.toString()
            val age = findViewById<EditText>(R.id.age_edit).text.toString().toInt()
            val salary = findViewById<EditText>(R.id.salary_edit).text.toString().toFloat()
            thread { userDao.insertAll(User(null, name, age, salary)) }
        }
    
        fun queryUser(view: View) {
            thread {
                val users = userDao.getAll()
                val sb = StringBuilder()
                users.forEach { sb.append(it).append('\n') }
                runOnUiThread {
                    findViewById<TextView>(R.id.users_text).text = sb
                }
            }
        }
    
        override fun onDestroy() {
            super.onDestroy()
            database.close()
        }
    }