1. 准备工作
简介
在使用 Room 持久保留数据 Codelab 中,您学习了如何在 Android 应用中实现 Room 数据库。本练习旨在让您有机会通过一组独立的步骤,进一步熟悉 Room 数据库的实现。
在本练习集中,您将运用在使用 Room 持久保留数据 Codelab 中学到的概念,完成 Bus Schedule 应用。此应用使用 Room 数据库提供的数据,向用户显示公交车站列表和计划发车时间。
解决方案代码就在文末。为了充分利用这个学习机会,请尝试尽量自行进行实现和问题排查,之后再查看所提供的解决方案代码。只有亲自动手实践,才能获得最好的学习效果。
前提条件
- 通过使用 Room 持久保留数据 Codelab,完成“Android 之 Compose 开发基础”课程作业
所需条件
- 一台连接到互联网并安装了 Android Studio 的计算机
- Bus Schedule 起始代码
构建内容
在本练习集中,您将实现一个数据库,然后使用该数据库将数据传送到界面,从而完成 Bus Schedule 应用。资源目录(位于起始代码中)中的一个数据库文件会为应用提供数据。请将这些数据加载到数据库中,并确保应用可读取这些数据。
在您完成该应用后,应用会显示公交站列表和相应的到达时间。您可以点击列表中的某一项,以转到提供该车站数据的详情屏幕。
完成后的应用会显示从 Room 数据库加载的这些数据:
2. 下载起始代码
- 在 Android Studio 中,打开
basic-android-kotlin-compose-training-bus-schedule
文件夹。 - 在 Android Studio 中打开 Bus Schedule 应用代码。
- 点击 Run 按钮
以构建并运行应用。
根据 starter
分支代码构建应用时,应用应显示一个站点的停靠时间表。
3. 添加依赖项
将以下依赖项添加到应用中:
app/build.gradle.kts
implementation("androidx.room:room-ktx:${rootProject.extra["room_version"]}")
implementation("androidx.room:room-runtime:${rootProject.extra["room_version"]}")
ksp("androidx.room:room-compiler:${rootProject.extra["room_version"]}")
您应该从 Room 文档中获取最新的稳定版 room
,并添加正确的版本号。目前,最新版本为:
build.gradle.kts
set("room_version", "2.5.1")
4. 创建 Room 实体
将当前的 Bus Schedule 数据类转换为 Room Entity
。
下图显示了最终数据表的外观示例,包括架构和 Entity
属性。
5. 创建数据访问对象
创建一个数据访问对象 (DAO) 以访问数据库。DAO 提供了一种用于检索数据库中所有项的方法,以及一种用于检索包含公交站名称的单个项的方法。请务必按到达时间对时间表进行排序。
6. 创建数据库实例
创建一个使用 Entity
和您的 DAO 的 Room 数据库。通过起始代码中 assets/database/bus_schedule.db
文件的数据,数据库会自行初始化。
7. 更新 ViewModel
更新 ViewModel,以便检索 DAO 的数据并将其提供给界面,而不是提供示例数据。请务必利用您的两种 DAO 方法,为列表和单个车站提供数据。