Java pour les développeurs Android

Manipuler une collection

Testez gratuitement nos 1324 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Initiez-vous à la boucle foreach et supprimez les éléments d'une ArrayList. Vous crasherez intentionnellement l'application pour apprendre à détecter les erreurs.
07:39

Transcription

Dans cette vidéo, nous allons voir comment supprimer un élément d'une ArrayList. Le but, dans notre projet, si l'on clique sur « Supprimer dernier », c'est que cela efface la dernière ligne. Nous verrons aussi la boucle forEach. Pour commencer, nous allons intercepter les clics sur le bouton Supprimer. Pour cela, nous allons déclarer le bouton « Supprimer dernier ». Nous lui avons donné l'ID qui a le même nom que la variable. Cela n'est pas obligatoire, je le rappelle, c'est juste un confort de programmation. Ici, je récupère un lien vers mon bouton grâce à un « FindViewById ». Enfin, je redirige ces clics sur la classe MainActivity. Lorsque je clique sur le bouton « Supprimer dernier », j’atterris donc dans ces morceaux de code-là. Pour supprimer le dernier élément, je vais créer une nouvelle méthode. Elle ne renverra rien. Elle s'appellera « supprimerDernier ». Nous avons vu dans la vidéo précédente qu'une ArrayList possède une méthode Remove qui permet de supprimer un élément. Nous allons faire « noms.Remove ». Nous avons un index ou un objet. L'objet, c'est : on lui transmet un élément et il l'enlève de l'ArrayList. Là, en l'occurrence, on veut supprimer une position, donc on va utiliser la première version où il faut lui donner la position à supprimer. La position à supprimer est la dernière. Donc la dernière, c'est la taille de la liste moins 1. Vu que le premier élément est à la position 0, le dernier élément est à la position taille de la liste moins 1. Donc « noms.size() -1 ». Même chose pour prénoms. Maintenant, il va falloir appeler la méthode. J'appelle la méthode « supprimerDernier ». Si je me contente d'appeler « supprimerDernier », qu'est-ce que je vais changer ? Je vais juste changer mes données. Mais mon écran ne va pas s'actualiser tout seul. Il va falloir que je reparcoure toutes mes données pour réafficher l'état de mes données. Donc on va rappeler la méthode « rafraichirEcran » qui, je le rappelle, parcourt mon nom et mon prénom et met à jour mon TextView, sauf que mon nom et mon prénom seront maintenant avec un élément en moins. Nous allons tester. J'en ajoute donc plusieurs et maintenant je tente de supprimer le dernier. Le dernier a bien disparu. Je continue. Et là, que va-t-il se passer si je reclique sur « Supprimer dernier » ? Faisons l'essai. L'application a cessé de fonctionner. J'ai donc une application qui a crashé. Nous allons donc parcourir les logs. Ici, j'ai mon ancien tag. Si, dans mon erreur, il n'y a pas le mot « tag », celle-ci n'apparaîtra pas dans les logs. Donc il faut bien penser à enlever ce filtre. Je suis bien sur le bon émulateur. Je suis bien sur mon projet, sur la bonne application. On voit que j'ai du rouge qui apparaît, c'est ce qu'on appelle une stack trace, c'est-à-dire que l'erreur a quand même donné des informations pour qu'on puisse l’identifier. Ici, j'ai vraiment tout un tas de choses. Ce qu'il faut arriver à identifier, c'est le lieu de l'erreur. Les parties bleues représentent notre code à nous. Les parties grises, ce sont des codes du SDK d'Android. Généralement, il y a peu de chances que ce soit le SDK d'Android qui fasse une erreur, ce sera plutôt votre code à vous, ou alors votre code à vous qui va provoquer une erreur dans le SDK d'Android. Donc si je clique, je vois que l'erreur vient de la méthode « supprimerDernier » dans la méthode onClick. En fait, le principe d'une stack trace, c'est qu'il va remonter jusqu'au lieu d'exécution de l'erreur. Si je remonte d'un cran, j'arrive dans la méthode « supprimerDernier », et là il m'indique carrément la ligne qui a provoqué l'erreur. Ici, il m'indique l'erreur. « ArrayIndexOutOfBoundsException ». Là, en gros, il me dit que je tente d'accéder à un élément qui n'est pas dans la liste. En gros, j'ai une file d'attente de trois personnes, et je demande à la cinquième personne de venir. Cette cinquième personne n'existe pas puisqu'il n'y a que trois éléments dans ma liste d'attente. Dans notre cas, nous supprimons le dernier. Sauf que, s'il n'y a plus de dernier, je me retrouve à demander un élément qui n'existe pas. C'est ce qu'il me dit là. Il me dit que l'index égal -1. Forcément : la taille de la liste ici est égale à 0. On lui demande l'élément numéro -1. N'existant pas, c'est une erreur. L'erreur provoque le crash de l'application. Pour corriger ça, il va falloir, avant de supprimer le dernier, faire un contrôle. Comment faire le contrôle ? « noms.isEmpty ». Est-ce que ma liste est vide ? Quelle est la différence entre « noms.isEmpty » et « noms.Length==0 » ? Tout simplement : une question de performance, qui, aujourd'hui, n'a plus une grande importance. Soit la liste est vide, soit je supprime le dernier. Si elle est vide, je peux, par exemple, mettre un petit toast, « La liste est vide ». Si je reviens ici. Je supprime le dernier. Si j'affiche le toast, je vais lui demander de rafraîchir l'écran alors que je n'ai rien changé puisque la liste était vide. Ça, ce n'est pas grave. C'est du code qui est tellement rapide que je pourrais le mille fois et vous ne verriez pas la différence. Rafraîchir un écran qui est déjà dans le même état ne pose aucun problème de performance. Nous allons tester. J'en ajoute deux. Je supprime. Je supprime. J’ai mon petit toast. Mon appli ne crashe plus. Donc j'ai bien fait un contrôle. Maintenant, je vais vous montrer la boucle forEach. Ici, quand je parcours tous mes éléments pour rafraîchir l'écran, je pourrais utiliser cette syntaxe. Je l'explique. J'ai mon ArrayList et ma variable nom que je créé pour l'occasion va prendre tour à tour tous les éléments de ma liste. En l'occurrence, pour notre cas, ce n'est pas adapté parce qu'on a besoin de deux éléments. On a besoin du nom et du prénom. Ici, il faudrait que je fasse les deux mais comme j'écris l'un derrière l'autre, on voit qu'il y a un petit problème. Voilà la syntaxe appelée forEach. En Java, elle se réalise avec le mot-clé « for ». La boucle forEach sera beaucoup plus utile quand on travaillera avec nos JavaBeans. Je vous avais dit précédemment qu'il existait le template toast et le template forEach. Si je commence à écrire « foreach », il me propose un template un peu moche parce qu'il n'y a pas choses pré-remplies et il ne devine pas sur quoi je veux travailler. Toute la partie sur le template. Vous avez maintenant vu comment supprimer un élément d'une ArrayList et faire un contrôle pour éviter un arrêt « OutOfBoundsException ». Nous y reviendrons car les collections sont vraiment un élément essentiel pour la programmation orientée objet et pour la programmation sur Android.

Java pour les développeurs Android

Prenez en main la syntaxe et les concepts de Java pour vos développements d’applications pour Android. Abordez les variables, les chaînes de caractères, les conditions, etc.

7h01 (65 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Votre/vos formateur(s) :
Date de parution :24 avr. 2017
Durée :7h01 (65 vidéos)

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !