演習: Bus Schedule アプリを作成する

1. 始める前に

はじめに

Room を使用してデータを永続化する Codelab では、Android アプリに Room データベースを実装する方法を学習しました。この演習では、独立して行われる一連のステップを通じて、Room データベースの実装について理解を深めることができます。

この演習セットでは、Room を使用してデータを永続化する Codelab で学習したコンセプトを使用して、Bus Schedule アプリを完成させます。このアプリは、Room データベースから取得したデータを使用して、バス停と出発予定時刻のリストをユーザーに提示します。

解答コードは最後にあります。この学習体験を最大限に活用するため、記載された解答コードを確認する前に、できる限りご自身で実装とトラブルシューティングを行ってみてください。この実践時間中に、多くのことを学びましょう。

前提条件

  • Persist Data with Room Codelab の「Compose を用いた Android アプリ開発の基礎」コースワークを完了していること

必要なもの

  • Android Studio がインストールされた、インターネットに接続できるパソコン。
  • Bus Schedule スターター コード

作成するアプリの概要

この演習セットでは、データベースを実装し、データベースを使用して UI にデータを配信することで、Bus Schedule アプリを完成させます。スターター コードのアセット ディレクトリにあるデータベース ファイルは、アプリのデータを提供します。このデータをデータベースに読み込み、アプリで読み取れるようにします。

アプリを完成させると、バス停の一覧とそれぞれの到着時刻が表示されます。リスト内の項目をクリックすると、そのバス停のデータを提供する詳細画面に移動できます。

完成したアプリが Room データベースから読み込まれたこのデータを表示します。

7fbafebbcc3a3eec.png

951621eedfc138fb.png

2. スターター コードをダウンロードする

  1. Android Studio で basic-android-kotlin-compose-training-bus-schedule フォルダを開きます。
  2. Android Studio で Bus Schedule アプリのコードを開きます。
  3. 実行ボタン 3e12ddc048503bc5.png をクリックして、アプリをビルドし実行します。

アプリが starter ブランチコードからビルドされた場合、1 つのバス停を示すスケジュールを表示することが想定されています。

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 からデータを取得し、サンプルデータを提供する代わりにこれを UI に提供します。リストと個々のバス停のデータを提供するには、両方の DAO メソッドを利用します。

8. 解答コード