Aller au contenu

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 :

  1. Cliquez sur le lien fourni par votre enseignant
  2. 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
  3. 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)
  4. 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éé :

git clone <url-de-votre-depot>
cd <nom-du-depot>

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 :

1
2
3
git add .
git commit -m "Description claire de la tâche réalisée"
git push

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 :

  1. Vérifiez que tout votre travail est poussé :

    git status
    git push
    

  2. 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).

  3. À 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 :

1
2
3
gh extension install foundation50/gh-student
gh student accept <organisation> <classe> <devoir>
gh student submit

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/… :

git tag submit/final && git push origin submit/final

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 :

Objectifs d'apprentissage

  • Comprendre et concevoir une application en utilisant les composants Android Architecture Components
  • Implémenter une base de données Room pour la persistance des données
  • Utiliser ViewModel pour gérer les données de l'interface utilisateur
  • Observer les données avec LiveData pour 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 SQL aux fonctions Kotlin dans un DAO (data access object).
  • Utiliser LiveData pour 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 Repository avec une API qui est agnostique quant à la manière dont les données sont stockées ou acquises.
  • Utiliser un ViewModel pour 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.