项目: 创建一个航班搜索应用程序

1. 开始之前

先决条件

  • 了解 SQL 的基础知识,用于读取和操作关系数据库。
  • 能够在 Android 应用程序中使用 Room 从数据库读取和写入数据。
  • 能够使用 DataStore 存储简单数据。
  • 能够使用 Compose 构建中等复杂度的用户界面。

你将构建什么

  • 一个 Android 应用程序,它会询问用户出发机场,搜索预先填充的数据库以呈现从该机场出发的航班列表,允许用户保存喜欢的航班,并使用 Room 更新数据库。

你需要什么

  • 一台安装了 Android Studio 的电脑

2. 概述

恭喜你完成了第 6 单元!你从关系数据库和结构化查询语言 (SQL) 的概述开始,将关系数据库与 Room 集成到应用程序中,并学习了关于 Preferences DataStore 用于持久化设置和 UI 状态的知识。现在是时候将你学到的所有知识付诸实践了。

在这个项目中,你将构建航班搜索应用程序,用户可以在其中输入一个机场,并使用该机场作为出发地查看目的地列表。该项目为你提供了实践 SQL、Room 和 DataStore 技能的机会,并提供了一组你必须满足的应用程序需求。特别是,你需要航班搜索应用程序满足以下需求:

  • 提供一个文本字段,供用户输入机场名称或国际航空运输协会 (IATA) 机场标识符。
  • 查询数据库,在用户输入时提供自动完成建议。
  • 当用户选择一个建议时,生成从该机场出发的可用航班列表,包括 IATA 标识符和机场名称到数据库中的其他机场。
  • 允许用户保存喜欢的个人路线。
  • 当没有输入搜索查询时,在列表中显示所有用户选择的收藏路线。
  • 使用 Preferences DataStore 保存搜索文本。当用户重新打开应用程序时,如果存在搜索文本,则需要使用数据库中的相应结果预填充文本字段。

我们已经为这个项目提供了预先填充的数据库。但是,预期你根据要求从头开始构建应用程序,这是你作为 Android 开发人员实际工作的练习。这个项目也是一个很好的机会,让你重新审视或进一步完善你的 Compose UI 构建技能,因为自从第 4 单元以来,你不需要进行太多 UI 工作。

3. 获取航班数据库

这个应用程序的数据来自航班数据库。航班数据库包含两个表,airportfavorite

airport 表包含以下模式。

数据类型

描述

id

INTEGER

唯一标识符(主键)

iata_code

VARCHAR

3 个字母的 IATA 代码

name

VARCHAR

完整的机场名称

passengers

INTEGER

每年乘客数量

favorite 表包含以下模式。

数据类型

描述

id

INTEGER

唯一标识符(主键)

departure_code

VARCHAR

出发地的 IATA 代码

destination_code

VARCHAR

目的地的 IATA 代码

你可以使用 airport 表搜索机场并构建潜在航班列表。你使用 favorite 表(最初为空)来保存用户选择的出发和到达目的地的配对。

从 SQL 基础知识 GitHub 存储库的 project 分支下载 flight_search.db 文件 这里

4. 规划你的应用程序

规划你的 UI

欢迎你根据自己的喜好设计应用程序。作为指南,以下描述和图像是一个示例,说明用户可能希望在应用程序中看到的内容。

当用户第一次打开应用程序时,他们会看到一个带有文本字段的空白屏幕,提示输入机场。

当用户开始输入时,应用程序会显示一个自动完成建议列表,这些建议与机场名称或标识符匹配。

38e2daa4d7d3ce47.png

当用户选择一个建议时,应用程序会显示从该机场出发的所有可能航班的列表。每个项目包括两个机场的标识符和名称,以及一个按钮,用于将目的地保存为收藏。请随意尝试不同的布局,只要它能传达所有必要的信息即可。

555d1fda9bd01095.png

当用户清除搜索框或不输入搜索查询时,应用程序会显示已保存的收藏目的地的列表(如果存在)。

844c9efbca15b5b1.png

使用 Room 集成航班数据库

为了实现上述功能,你需要利用你对 SQL 和 Room 的了解。数据库已经包含两个表,airportfavorite,你需要为每个表创建实体。选择合适的 Kotlin 数据类型,以便你可以访问每个表中的值。

此外,在查询航班数据库和持久化数据时,你需要考虑以下需求:

  • 在 airport 表中搜索自动完成建议。请记住,用户可能已经知道机场代码,因此你需要在搜索文本时检查他们的输入与 iata_code 列,以及 name 列。请记住,你可以使用 LIKE 关键字执行文本搜索。
  • 通过对 passengers 列进行排序,按降序显示访问频率更高的机场。
  • 假设每个机场都有航班飞往数据库中的所有其他机场(除了它本身)。
  • 当搜索框中没有文本时,显示收藏航班的列表,显示出发地和目的地。由于 favorite 表只包含机场代码的列,因此你不需要在此列表中显示机场名称。
  • 使用 SQL 和 Room API 执行所有数据库查询。重点是不将整个数据库一次性加载到内存中,而是在需要时只检索必要的数据。

使用 Preferences DataStore 持久化用户状态

除了 SQL 和 Room 之外,你还知道如何持久化用户设置等单个值。对于航班搜索应用程序,你需要将用户的搜索字符串存储在 Preferences DataStore 中,以便在用户重新启动应用程序时填充它。如果用户退出应用程序时文本字段为空,则需要显示收藏航班的列表。

5. 构建航班搜索应用程序

现在你已经通读了所有需求,现在是时候构建你的应用程序了。虽然这个单元专门关注数据持久化,但继续积累实践经验很重要。虽然你已经看到了航班搜索应用程序在行动中的示例屏幕截图,但这个项目是你让应用程序独一无二的机会。

虽然这些确切的任务并不熟悉,但你已经掌握了构建这个项目所需的所有核心概念。如果你遇到困难或需要复习,可以参考之前的代码实验室。

以下内容可能在你的项目中对你有所帮助:

最重要的是,享受这个过程!学习是一个旅程。即使你发现这个项目很有挑战性,你可能也会学到一些新东西,然后下次发现同样的问题很容易解决。玩得开心,我们下一单元再见!