Room, LiveData et ViewModel¶
Bienvenue dans ce deuxième travail pratique ! Ce TP vous permettra de découvrir les composants d'architecture Android essentiels pour développer des applications robustes et maintenables. Vous allez apprendre à utiliser Room pour la persistance des données, LiveData pour observer les changements de données en temps réel, et ViewModel pour gérer efficacement les données de l'interface utilisateur tout en respectant le cycle de vie Android. À travers la création d'une application de gestion de mots, vous mettrez en pratique ces concepts fondamentaux qui constituent la base du développement Android moderne. Tout le code de ce TP est écrit en Kotlin.
Méthodologie de travail¶
Ce TP est distribué et remis via Classroom 50, l'alternative libre à GitHub Classroom : vous recevez un dépôt GitHub privé personnel, et chaque git push est enregistré comme une soumission. Vous aurez besoin de Git et d'un compte GitHub.
1. Réception et acceptation du devoir¶
Votre enseignant vous partagera un lien Classroom 50 pour ce TP, de la forme https://classroom50.org/<organisation>/<classe>/assignments/<devoir>. Suivez ces étapes :
- Cliquez sur le lien fourni par votre enseignant
- Cliquez sur Sign in with GitHub et autorisez l'application Classroom 50 (uniquement la première fois), avec le compte GitHub associé à l'adresse e-mail communiquée à votre enseignant
- Acceptez l'invitation à l'organisation GitHub de la classe si ce n'est pas déjà fait (GitHub vous l'envoie par e-mail ; la page d'acceptation du devoir peut aussi l'accepter pour vous)
- Cliquez sur Accept assignment, attendez que Classroom 50 crée votre dépôt (cela peut prendre quelques secondes), puis cliquez sur Open repository
Un seul dépôt valide
Ne créez pas de dépôt vous-même et ne « forkez » pas le dépôt du devoir : le dépôt généré à l'acceptation, nommé <classe>-<devoir>-<votre-identifiant-github>, est le seul qui sera évalué.
La page affiche « Not a member yet » ?
Votre compte ne fait pas encore partie de la classe. Demandez à votre enseignant de vous ajouter à la liste de la classe. Une fois l'invitation reçue et acceptée, cliquez sur Check again.
2. Clonage du dépôt¶
Une fois votre dépôt créé :
3. Travail sur la branche principale¶
Avec Classroom 50, vous travaillez directement sur la branche principale (main) de votre dépôt : c'est elle qui est évaluée.
Pas de branche de travail
Chaque git push sur main est enregistré comme une soumission, et la Pull Request « Feedback » de votre dépôt compare main à l'état initial du devoir. Un travail poussé sur une autre branche ne serait pas pris en compte.
4. Commits réguliers¶
À la fin de chaque tâche ou exercice, commitez puis poussez votre travail :
5. Soumission du compte rendu¶
Avec Classroom 50, soumettre, c'est pousser : chaque git push sur main enregistre une nouvelle soumission. Il n'y a aucun lien ni fichier à envoyer à votre enseignant.
À la fin du TP :
-
Vérifiez que tout votre travail est poussé :
-
Vérifiez votre soumission sur classroom50.org : ouvrez votre classe (View assignments), choisissez ce devoir, puis cliquez sur My submission. L'état doit indiquer Submitted, avec la date de votre dernière soumission. Si le devoir est évalué automatiquement, le résultat est publié dans l'onglet Releases de votre dépôt GitHub (le déroulement de l'évaluation est visible dans l'onglet Actions).
-
À la fin de chaque tâche, prenez une capture d'écran de votre application en fonctionnement et ajoutez-la en commentaire de la Pull Request « Feedback » de votre dépôt (onglet Pull requests sur GitHub).
Important
Cette Pull Request est ouverte automatiquement par Classroom 50 lorsque vous acceptez le devoir : votre enseignant s'en sert pour commenter votre code. NE LA FERMEZ PAS et ne cherchez pas à la fusionner (seul l'enseignant le peut) : laissez-la ouverte en attendant la validation de votre enseignant.
Vous ne voyez pas la Pull Request « Feedback » ?
Contactez votre enseignant : les retours par Pull Request peuvent être désactivés pour un devoir.
Soumettre en ligne de commande (optionnel)
L'extension gh student du GitHub CLI permet d'accepter et de soumettre un devoir sans quitter le terminal :
gh student accept crée votre dépôt et affiche la commande git clone à exécuter. Depuis le dépôt cloné, gh student submit enregistre votre travail dans un nouveau commit et le pousse sur main.
Si votre enseignant précise que le devoir n'est évalué qu'à la soumission, un simple git push n'est pas évalué : utilisez gh student submit, ou poussez une étiquette submit/… :
Plus de détails dans les guides étudiants de Classroom 50 : version web et version ligne de commande.
Sauvegardez souvent votre travail !
Utilisez Git (commit puis push) pour sauvegarder régulièrement votre travail après chaque tâche. Cela vous permettra de revenir à une version antérieure en cas de problème. N'attendez pas la fin du TP pour faire un commit, vous risquez de perdre beaucoup de travail en cas de problème. Exemple de message de commit : "fin de la tâche 1".
Prérequis¶
Vous devez être familiarisé avec Kotlin, les concepts de conception orientée objet et les fondamentaux du développement Android. En particulier :
RecyclerViewet adaptateurs- Bases de données SQLite et le langage de requête SQL
- Les coroutines Kotlin : fonctions
suspendetlaunch, pour exécuter du travail en arrière-plan
Objectifs d'apprentissage¶
- Comprendre et concevoir une application en utilisant les composants Android Architecture Components
- Implémenter une base de données
Roompour la persistance des données - Utiliser
ViewModelpour gérer les données de l'interface utilisateur - Observer les données avec
LiveDatapour une interface réactive - Exécuter les opérations d'écriture en arrière-plan avec les coroutines Kotlin (
suspend,viewModelScope)
Ce que vous allez réaliser¶
- Créer une application avec une activité qui affiche une liste de mots dans un
RecyclerView. - Créer une entité (
Entity) qui représente les objets de mots. - Définir le mappage des requêtes
SQLaux fonctions Kotlin dans unDAO(data access object). - Utiliser
LiveDatapour rendre les modifications apportées aux données visibles à l'interface utilisateur, par l'intermédiaire d'observateurs. - Ajouter une base de données
Roomà l'application pour persister les données localement, et initialiser la base de données. - Abstraire la couche de données sous la forme d'une classe
Repositoryavec une API qui est agnostique quant à la manière dont les données sont stockées ou acquises. - Utiliser un
ViewModelpour séparer toutes les opérations de données de l'interface utilisateur. - Ajouter une deuxième activité qui permet à l'utilisateur d'ajouter de nouveaux mots.