1. Avant de commencer
Conditions préalables
- Vous possédez des connaissances de base du langage SQL pour lire et manipuler une base de données relationnelle.
- Vous savez utiliser Room dans une application Android pour lire et écrire dans une base de données.
- Vous savez utiliser DataStore pour stocker des données simples.
- Vous savez comment créer des interfaces utilisateur plutôt complexes avec Compose.
Objectifs de l'atelier
- Créer une application Android qui demande à l'utilisateur un aéroport de départ, recherche une base de données préremplie afin de présenter la liste des vols au départ de cet aéroport, lui permet d'enregistrer ses vols favoris et met à jour la base de données avec Room
Ce dont vous avez besoin
- Un ordinateur avec Android Studio
2. Présentation
Nous vous félicitons d'avoir terminé le module 6 ! Vous avez commencé avec une présentation générale des bases de données relationnelles et du langage SQL (Structured Query Language). Vous avez ensuite intégré une base de données relationnelle dans une application avec Room, puis vous avez découvert Preferences DataStore afin d'assurer la persistance des paramètres et de l'état de l'UI. À présent, vous allez mettre en pratique tout ce que vous avez appris.
Dans ce projet, vous allez créer une application de recherche de vols dans laquelle les utilisateurs saisiront un aéroport et pourront consulter la liste des destinations desservies. Ce projet, qui vous demande de répondre à un ensemble d'exigences spécifique à l'application, vous permettra de vous entraîner à utiliser SQL, Room et DataStore. L'application de recherche de vols doit notamment remplir les conditions suivantes :
- Elle doit permettre d'indiquer un nom d'aéroport ou un identifiant d'aéroport IATA (International Air Transport Association) dans un champ de texte.
- Elle doit permettre d'interroger la base de données afin de fournir des suggestions de saisie automatique à mesure que l'utilisateur tape du texte.
- Lorsque l'utilisateur choisit une suggestion, l'application doit générer une liste des vols disponibles depuis cet aéroport, y compris l'identifiant IATA et le nom de l'aéroport par rapport aux autres aéroports inclus dans la base de données.
- Elle doit permettre à l'utilisateur d'enregistrer ses itinéraires favoris.
- Lorsqu'aucune requête de recherche n'est saisie, l'application doit afficher tous les itinéraires favoris sélectionnés par l'utilisateur sous forme de liste.
- Elle doit permettre d'enregistrer le texte de recherche avec Preferences DataStore. Lorsque l'utilisateur rouvrira l'application, le texte de la recherche (le cas échéant) devra préremplir le champ de texte avec les résultats appropriés de la base de données.
Nous mettons à votre disposition une base de données préremplie pour ce projet. Cependant, il est impératif que vous conceviez l'application à partir de zéro en remplissant les conditions requises. L'objectif est de vous entraîner en tant que développeur Android. Ce projet vous permettra également de revoir ou de perfectionner vos compétences en création d'UI avec Compose, sachant que vous n'avez pas eu à effectuer beaucoup de tâches d'UI depuis le module 4.
3. Générer la base de données des vols
Les données pour cette application proviennent de la base de données des vols, intitulée "flights". Cette base de données contient deux tables : airport (aéroport) et favorite (favori).
La table airport (aéroport) contient le schéma suivant :
Colonne | Type de données | Description |
id | ENTIER | Identifiant unique (clé primaire) |
iata_code | VARCHAR | Code IATA à trois lettres |
name | VARCHAR | Nom complet de l'aéroport |
passengers | ENTIER | Nombre de passagers par an |
La table favorite (favori) contient le schéma suivant :
Colonne | Type de données | Description |
id | ENTIER | Identifiant unique (clé primaire) |
departure_code | VARCHAR | Code IATA de l'aéroport de départ |
destination_code | VARCHAR | Code IATA de l'aéroport d'arrivée |
Vous pouvez utiliser la table "airport" (aéroport) pour rechercher des aéroports et créer une liste des vols potentiels. Vous utiliserez la table "favorite" (favori), qui est initialement vide, pour enregistrer les paires aéroport de départ/aéroport d'arrivée sélectionnées par l'utilisateur.
Téléchargez le fichier flight_search.db
depuis la branche project
du dépôt GitHub SQL Basics.
4. Préparer votre application
Préparer l'UI
Vous pouvez concevoir votre application comme vous le souhaitez. À titre indicatif, les images et descriptions suivantes illustrent ce que l'utilisateur peut s'attendre à voir dans l'application.
Lorsque l'utilisateur ouvre l'application pour la première fois, un écran vide avec un champ de texte l'invite à indiquer un aéroport.
Lorsqu'il commence à saisir du texte, l'application doit afficher une liste de suggestions de saisie automatique correspondant au nom ou à l'identifiant de l'aéroport.
Lorsque l'utilisateur sélectionne une suggestion, l'application doit afficher une liste de tous les vols possibles au départ de cet aéroport. Chaque élément doit inclure l'identifiant et le nom des deux aéroports, ainsi qu'un bouton permettant d'enregistrer la destination dans les favoris. N'hésitez pas à tester différentes mises en page, en vous assurant que toutes les informations nécessaires y figurent.
Lorsque l'utilisateur efface le champ de recherche ou ne saisit pas de requête de recherche, l'application doit afficher la liste des destinations enregistrées dans les favoris, le cas échéant.
Utiliser Room pour intégrer la base de données des vols
Pour implémenter les fonctionnalités ci-dessus, vous allez vous servir des notions que vous avez en SQL et de vos connaissances sur Room. La base de données comprend déjà deux tables, airport (aéroport) et favorite (favori). Chacune d'elles requiert des entités. Sélectionnez les types de données Kotlin appropriés afin d'accéder aux valeurs de chaque table.
Vous devez également prendre en compte les exigences suivantes lorsque vous interrogez la base de données des vols et que vous implémentez la persistance des données :
- Recherchez des suggestions de saisie automatique dans la table "airport" (aéroport). Gardez à l'esprit que l'utilisateur connaît peut-être déjà le code de l'aéroport. Vous devez donc comparer son entrée à la colonne
iata_code
, en plus de la colonnename
, lors de la recherche du texte. N'oubliez pas que vous pouvez utiliser le mot cléLIKE
pour effectuer des recherches textuelles. - Affichez les aéroports les plus populaires dans l'ordre décroissant en les triant au niveau de la colonne "passengers" (passagers).
- Supposons que chaque aéroport ait des vols vers tous les autres aéroports de la base de données (sauf l'aéroport de départ lui-même).
- Si aucun texte ne figure dans le champ de recherche, affichez la liste des vols favoris, avec l'aéroport de départ et l'aéroport d'arrivée. Comme la table "favorite" (favori) ne contient que des colonnes pour les codes d'aéroport, n'affichez pas le nom des aéroports dans cette liste.
- Effectuez toutes les requêtes de base de données avec SQL et les API Room. L'objectif est de récupérer uniquement les données requises, et NON de charger l'intégralité de votre base de données en mémoire en une seule fois.
Assurer la persistance de l'état utilisateur avec Preferences DataStore
Non seulement vous avez des notions en SQL et vous maîtrisez Room, mais vous savez aussi comment assurer la persistance de valeurs individuelles telles que les paramètres utilisateur. Pour l'application de recherche de vols, vous devez stocker la chaîne de recherche de l'utilisateur dans Preferences DataStore afin qu'elle soit renseignée lorsque l'utilisateur relancera l'application. Si le champ de texte est vide lorsque l'utilisateur quitte l'application, la liste des vols favoris devra être affichée à la place.
5. Créer l'application de recherche de vols
Maintenant que vous avez lu toutes les conditions requises, il est temps de créer votre application. Bien que ce module soit exclusivement consacré à la persistance des données, il est important que vous continuiez à vous entraîner. Nous vous avons présenté plusieurs exemples de captures d'écran pour vous montrer l'application de recherche de vols en action. Toutefois, n'hésitez pas à laisser libre cours à votre imagination et à vous démarquer.
Même si ces tâches ne vous sont pas familières, vous connaissez déjà tous les concepts fondamentaux pour créer ce projet. Si vous rencontrez des difficultés ou si vous avez besoin de rafraîchir vos connaissances, vous pouvez vous reporter aux précédents ateliers de programmation.
Les ressources suivantes pourront vous être utiles à mesure que vous avancerez sur votre projet :
- Utiliser SQL pour lire et écrire dans une base de données
- Persistance des données avec Room
- Lire et mettre à jour des données avec Room
- Stocker les préférences localement avec DataStore
Et surtout, amusez-vous ! N'ayez pas peur de vous tromper. Même si vous trouvez ce projet difficile, vous découvrirez sûrement de nouvelles choses. Et si les mêmes problèmes surviennent par la suite, vous saurez quoi faire. Faites-vous plaisir et à bientôt dans le prochain module !