Tâche 5 : Ajouter de nouveaux mots à la base de données¶
Lorsque l'utilisateur clique sur le FAB, une activité s'ouvre et lui permet de saisir un mot qui sera ajouté à la base de données lorsqu'il cliquera sur Enregistrer.
Le code de démarrage vous fournit l'écouteur de clic et l'EditWordActivity démarré en cliquant sur le FAB. Vous ajouterez le code spécifique à la base de données et relierez les éléments ensemble, de bas en haut, comme vous venez de le faire avec la méthode de requête.
1. Écrivez la méthode insert()¶
Dans WordListOpenHelper :
-
Créez la méthode
insert()avec la signature suivante. L'utilisateur fournit un mot et la méthode renvoie l'identifiant de la nouvelle entrée. Les identifiants générés peuvent être grands, donc insert renvoie un nombre de typelong. -
Déclarez une variable pour l'identifiant. Si l'opération d'insertion échoue, la méthode renvoie
0. -
Comme précédemment, créez une valeur
ContentValuespour les données de la ligne. -
Placez votre opération de base de données dans un bloc
try/catch. -
Obtenez une base de données accessible en écriture si elle n'existe pas déjà.
-
Insérer la ligne.
-
Enregistrer l'exception.
-
Renvoyer l'
ID.
Solution O_O
2. Obtenir le mot à insérer de l'utilisateur et mettre à jour la base de données¶
Le code de démarrage est fourni avec une EditWordActivity qui obtient un mot de l'utilisateur et le renvoie à l'activité principale. Dans MainActivity, il vous suffit de remplir la méthode onActivityResult() de mEditWordActivityLauncher
startActivityForResult() est obsolète
mEditWordActivityLauncher est une instance de ActivityResultLauncher<Intent>, qui est la nouvelle façon de gérer les résultats d'activité. Elle remplace la méthode obsolète startActivityForResult().
mEditWordActivityLauncher.launch(intent) démarre l'activité, et le résultat est géré dans la méthode onActivityResult() ci-dessous.
-
Vérifiez que le résultat provient de la bonne activité et obtenez le mot que l'utilisateur a saisi à partir des extras.
-
Si le mot n'est pas vide, vérifiez si un identifiant nous a été transmis avec les extras. S'il n'y a pas d'identifiant, insérez un nouveau mot. Dans la tâche suivante, vous mettrez à jour le mot existant si un identifiant est transmis.
-
Pour mettre à jour l'interface utilisateur, notifiez l'adaptateur que les données sous-jacentes ont changé.
-
Si le mot est vide parce que l'utilisateur n'a rien saisi, affichez un toast pour le lui faire savoir. Et n'oubliez pas de fermer toutes les parenthèses.
Solution O_O
3. Implémenter getItemCount()¶
Pour que les nouveaux éléments s'affichent correctement, getItemCount dans WordListAdapter doit renvoyer le nombre réel d'entrées dans la base de données au lieu du nombre de mots dans la liste de démarrage des mots.
-
Remplacez
getItemCountpar le code ci-dessous, ce qui déclenchera une erreur. -
Ouvrez
WordListOpenHelperet implémentezcount()pour renvoyer le nombre d'entrées dans la base de données. -
Exécutez votre application et ajoutez des mots.
Félicitations !
Vous avez complété la tâche 5. Vous avez implémenté la méthode insert() dans WordListOpenHelper et mis à jour MainActivity pour insérer un nouveau mot dans la base de données.
N'oubliez pas de committer sur la branche tp-sqlite de votre dépot git local.