1. 开始之前
简介
在 使用 Room 持久化数据 Codelab 中,您学习了如何在 Android 应用中实现 Room 数据库。本练习提供了通过独立完成的步骤来进一步熟悉 Room 数据库实现的机会。
在本练习中,您将运用从 使用 Room 持久化数据 Codelab 中学到的概念来完成公交时刻表应用。此应用使用 Room 数据库提供的数据向用户展示公交站点列表和预定发车时间。
解决方案代码在最后提供。为了充分利用本次学习体验,在查看提供的解决方案代码之前,请尽可能尝试实现和排除故障。正是通过动手实践,您才能学到最多。
前提条件
- 完成 Android Basics with Compose 课程,包括 使用 Room 持久化数据 Codelab
您需要准备什么
- 一台连接互联网并安装 Android Studio 的计算机
- 公交时刻表应用的入门代码
您将构建什么
在本练习中,您将通过实现数据库,然后使用数据库向 UI 传递数据来完成公交时刻表应用。入门代码的 asset 目录中提供的数据库文件为应用提供数据。您将这些数据加载到数据库中,并使其可供应用读取使用。
完成应用后,它会显示公交站点列表和相应的到达时间。您可以点击列表中的某一项来触发导航到详情屏幕,该屏幕提供该站点的数据。
完成的应用显示此数据,数据加载自 Room 数据库
2. 下载入门代码
- 在 Android Studio 中,打开
basic-android-kotlin-compose-training-bus-schedule
文件夹。 - 在 Android Studio 中打开公交时刻表应用代码。
- 点击 运行 按钮
以构建并运行应用。
从 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 Entity
将当前的 Bus Schedule 数据类转换为 Room Entity
。
下图显示了最终数据表的示例外观,包括 schema 和 Entity
属性。
5. 创建数据访问对象
创建一个数据访问对象 (DAO) 来访问数据库。DAO 提供一个方法来检索数据库中的所有项,以及一个通过公交站点名称检索单个项的方法。请确保按到达时间对时刻表进行排序。
6. 创建数据库实例
创建一个使用 Entity
和您的 DAO 的 Room 数据库。该数据库使用入门代码中 assets/database/bus_schedule.db
文件中的数据进行初始化。
7. 更新 ViewModel
更新 ViewModel 以从 DAO 检索数据并将其提供给 UI,而不是提供示例数据。请确保利用您的两个 DAO 方法为列表和单个站点提供数据。