练习:构建 Bus Schedule 应用

1. 准备工作

简介

使用 Room 持久保留数据 Codelab 中,您学习了如何在 Android 应用中实现 Room 数据库。本练习旨在让您有机会通过一组独立的步骤,进一步熟悉 Room 数据库的实现。

在本练习集中,您将运用在使用 Room 持久保留数据 Codelab 中学到的概念,完成 Bus Schedule 应用。此应用使用 Room 数据库提供的数据,向用户显示公交车站列表和计划发车时间。

解决方案代码就在文末。为了充分利用这个学习机会,请尝试尽量自行进行实现和问题排查,之后再查看所提供的解决方案代码。只有亲自动手实践,才能获得最好的学习效果。

前提条件

所需条件

  • 一台连接到互联网并安装了 Android Studio 的计算机
  • Bus Schedule 起始代码

构建内容

在本练习集中,您将实现一个数据库,然后使用该数据库将数据传送到界面,从而完成 Bus Schedule 应用。资源目录(位于起始代码中)中的一个数据库文件会为应用提供数据。请将这些数据加载到数据库中,并确保应用可读取这些数据。

在您完成该应用后,应用会显示公交站列表和相应的到达时间。您可以点击列表中的某一项,以转到提供该车站数据的详情屏幕。

完成后的应用会显示从 Room 数据库加载的这些数据:

7fbafebbcc3a3eec.png

951621eedfc138fb.png

2. 下载起始代码

  1. 在 Android Studio 中,打开 basic-android-kotlin-compose-training-bus-schedule 文件夹。
  2. 在 Android Studio 中打开 Bus Schedule 应用代码。
  3. 点击 Run 按钮 3e12ddc048503bc5.png 以构建并运行应用。

根据 starter 分支代码构建应用时,应用应显示一个站点的停靠时间表。

54aa202086b74e1c.png

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 属性。

d2ac3220c9a0f3ff.png

5. 创建数据访问对象

创建一个数据访问对象 (DAO) 以访问数据库。DAO 提供了一种用于检索数据库中所有项的方法,以及一种用于检索包含公交站名称的单个项的方法。请务必按到达时间对时间表进行排序。

6. 创建数据库实例

创建一个使用 Entity 和您的 DAO 的 Room 数据库。通过起始代码中 assets/database/bus_schedule.db 文件的数据,数据库会自行初始化。

7. 更新 ViewModel

更新 ViewModel,以便检索 DAO 的数据并将其提供给界面,而不是提供示例数据。请务必利用您的两种 DAO 方法,为列表和单个车站提供数据。

8. 解决方案代码