练习:构建公交时刻表应用

1. 开始之前

简介

使用 Room 持久化数据 代码实验室中,您学习了如何在 Android 应用中实现 Room 数据库。本练习提供了一个机会,让您通过一组独立驱动的步骤,进一步熟悉 Room 数据库的实现。

在本练习集中,您将利用从使用 Room 持久化数据 代码实验室中学到的概念来完成公交时刻表应用。此应用使用 Room 数据库提供的数据,向用户展示公交车站列表和预定发车时间。

解决方案代码在最后提供。为了充分利用这种学习体验,请在查看提供的解决方案代码之前,尽可能多地尝试实现和解决问题。在实践操作的过程中,您的学习效果会更好。

先决条件

您需要什么

  • 一台连接互联网的电脑和 Android Studio
  • 公交时刻表启动代码

您将构建什么

在本练习集中,您将通过实现数据库并使用数据库将数据传递到 UI 来完成公交时刻表应用。启动代码中 assets 目录中的数据库文件为应用提供数据。您将这些数据加载到数据库中,并使其可供应用读取。

完成应用后,它将显示公交车站列表和相应的到达时间。您可以点击列表中的项目,触发导航到详细信息屏幕,该屏幕提供该站点的相关数据。

已完成的应用将显示这些数据,这些数据从 Room 数据库加载

cdb6f9e79137f323.png

6c59e6f57f59bd27.png

2. 下载启动代码

  1. 在 Android Studio 中,打开basic-android-kotlin-compose-training-bus-schedule 文件夹。
  2. 在 Android Studio 中打开公交时刻表应用代码。
  3. 点击运行按钮65e9e2045e2dc48b.png 以构建并运行应用。

starter 分支代码构建时,应用应显示一个显示一个站点的时刻表。

3603c91854cada9a.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 实体

下图显示了最终数据表的一个示例,包括模式和实体属性。

9587f9a5f035e552.png

5. 创建数据访问对象

创建数据访问对象 (DAO) 以访问数据库。DAO 提供了一种方法来检索数据库中的所有项目,以及一种方法来检索具有公交车站名称的单个项目。确保按到达时间对时刻表进行排序。

6. 创建数据库实例

创建一个 Room 数据库,该数据库使用实体和您的 DAO。数据库使用启动代码中的assets/database/bus_schedule.db 文件中的数据进行初始化。

7. 更新 ViewModel

更新 ViewModel 以从 DAO 检索数据并将其提供给 UI,而不是提供示例数据。确保利用您的两个 DAO 方法来为列表和各个站点提供数据。

8. 解决方案代码