安卓架构组件房间概述
为什么用房间?
- 缓存相关的数据片段,这样当用户的设备离线时,他们仍然可以离线浏览和查看内容。
- 编译时 SQLite 查询验证可以防止应用程序崩溃。
- 它提供的注释最小化了样板代码。
- 这还提供了与其他架构组件(如实时数据、生命周期服务器等)的轻松集成。,可以在这里取谷歌提供的 codelab。
房间和 SQLite 的区别
房间主要部件
- 数据库类:这为应用程序的持久化数据提供了到底层连接的主要访问点。这是用@数据库标注的。
- 数据实体:代表现有数据库中的所有表。并用@实体标注。
- DAO(数据访问对象):包含对数据库执行操作的方法。并注有“”字@道。
房间图书馆建筑
从下图中,我们可以推断出房间数据库的工作情况,因为应用程序首先获取与现有的房间数据库关联的数据访问对象(DAOs) 。获取 DAO s 后,通过 DAO s 从数据库表中访问实体。然后它可以对这些实体执行操作,并将更改保存回数据库。
在安卓应用中实现房间数据库的步骤
步骤 1:创建一个空的活动项目
- 创建一个空的活动安卓工作室项目。参考安卓|如何在安卓工作室创建/启动新项目?,来看看如何创建一个空的活动 Android Studio 项目。
- 并选择 Kotlin 作为语言。
步骤 2:添加所需的依赖关系
- 将以下依赖项添加到应用级渐变文件中。前往项目名称- > src - > build.gradle.
// room_version 可能会有所不同
def room_version = "2.3.0"
实现“androidx . room:room-runtime:$ room _ version”
kapt“androidx . room:room-compiler:$ room _ version”
实现“androidx . room:room-ktx:$ room _ version”
测试实施“androidx . room:room-testing:$ room _ version”
现在逐个创建房间的组件:
注意:这里创建的每个接口和类的实体都很重要,需要注意。
步骤 3:创建数据实体
- 创建一个命名为 User.kt. 的示例数据类
- 并调用以下包含实体用户作为实体的代码,实体代表一行,名字、姓氏、年龄代表表的列名。
我的锅
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity
data class User(
@PrimaryKey(autoGenerate = true) val uid: Int,
@ColumnInfo(name = "name") val firstName: String?,
@ColumnInfo(name = "city") val lastName: String?
)
步骤 4:创建数据访问对象(Dao):
- 现在创建一个名为 UserDao.kt 的界面。
- 并调用下面的代码,该代码提供了应用程序用来与用户交互的各种方法。
我的锅
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
@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>
@Insert
fun insertAll(vararg users: User)
@Delete
fun delete(user: User)
}
步骤 5:创建数据库
-
现在创建定义实际应用程序数据库的数据库,它是应用程序持久化数据的主要访问点。该类必须满足:
-
该类必须是抽象的。
- 班级要用@数据库标注。
-
数据库类必须定义一个不带参数的抽象方法,并返回一个 DAO 实例。
-
现在在 AppDatabase.kt 文件中调用以下代码。
我的锅
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = arrayOf(User::class), version = 1)
abstract class UserDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
}
步骤 6:使用房间数据库
- 在 MainActivity.kt 文件中,我们可以通过为数据库提供自定义名称来创建一个数据库。
我的锅
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.room.Room
class MainActivity : AppCompatActivity() {
// application's Database name
private val DATABASE_NAME: String = "USER_DATABASE"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// get the instance of the application's database
val db = Room.databaseBuilder(
applicationContext, UserDatabase::class.java, DATABASE_NAME
).build()
// create instance of DAO to access the entities
val userDao = db.userDao()
// using the same DAO perform the Database operations
val users: List<User> = userDao.getAll()
}
}
注意:通过使用这个关于房间数据库的基本知识,可以参考使用房间数据库构建一个基本的 CRUD 应用程序如何在 Android 的房间数据库中执行 CRUD 操作?。