Nous mettrons à jour notre Politique de confidentialité prochainement. En voici un aperçu.

Java pour les développeurs Android

Aborder les AsyncTask

Testez gratuitement nos 1334 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Faites connaissance avec les principes de Thread et d'UIThread. Ils préviendront tout blocage de votre application lors d'une requête web un peu longue.
08:36

Transcription

Dans cette vidéo, nous allons voir comment faire un appel Web dans un srt différent. Dans la séquence précédente, nous avons vu que notre requête Web a été bloquée par le SDK, question de sécurité et nous indique qu'il n'est pas possible de faire une requête sur le srt principal. Le srt principal est celui qui manipule l'interface graphique. Si on bloque celui-ci, nous nous retrouvons avec une application figée. Souvenez-vous, lorsque nous avons tenté d'afficher 10.000 personnes dans notre Text View, nous avons bloqué le srt pendant quatre à cinq secondes, le temps qu'il fasse la mise à jour graphique. Notre application était inutilisable pendant ces quatre à cinq secondes. Si nous faisons une requête qui échoue et qui a un Time Out de 10 à 20 secondes, nous nous retrouvons avec une application inutilisable pendant une dizaine de secondes. Le système, si l'application reste bloquée plus de six à sept secondes, propose de la tuer. Nous allons donc voir comment faire un deuxième srt, qui pourra prendre du temps, tout en laissant libre le srt graphique. La chose à retenir, c'est que, quand nous allons faire un nouveau srt, ce srt-là ne pourra pas manipuler les interfaces graphiques. Il n'y a qu'un srt, le srt principal, ici appelé, dans notre erreur, le main srt, qui peut manipuler les interfaces graphiques. Pendant ce temps, tout ce que nous avons fait jusqu'à présent, se passe sur le srt principal. Nous allons créer ici, une Assign Task, alors, qu'est-ce que c'est ? C'est un outil, mis à disposition par le SDK d'Android, dont nous allons hériter pour pouvoir l'utiliser. Nous allons faire une Inner Class, donc : Public, Classe, Mon, AT pour Assign Task, extend Assign Task. Ici, il propose de typer l'Assign Task. Dans cette vidéo, nous allons faire simple et nous contenter de ne pas la typer. J'ai donc créé mon Assign Task, celle-ci étant une classe abstraite, je vais devoir implémenter une méthode. Toujours le même principe, je clique sur le trait rouge Alt Entrée, cela me génère la méthode à implémenter. Tout l'intérêt de cette Assign Task, c'est cette méthode. Cette méthode sera exécutée dans un srt différent. C'est-à-dire que tout ce qu'on va mettre dans cette méthode, ne bloquera pas l'interface graphique. Celle ligne-là, qui peut durer jusque 10 à 30 secondes, une minute, selon le Time Out qu'on utilise, on va la mettre ici. Il va falloir gérer les exceptions. Alors, on va rester simple, je vais créer deux attributs dans mon Assign Task, un string, résultat et une exception. je vais les mettre tous les deux à nul. Je vais faire résultat égal et ici, exception égal E. Petite astuce, on a vu que getfield du serveur retourne une arraylist de fields. Et moi, je l'ai stocké dans une variable de type string, ce n'est donc pas le bon typage, j'ai une erreur. Alt entrée et je peux changer le typage de ma variable pour qu'elle s'adapte à ma méthode. Donc là, j'ai corrigé mon erreur rapidement. Ici, on ne prend pas en compte le return, la méthode doing background, je vous l'ai dit, est appelée dans un srt différent. Il existe une méthode qui s'appelle : on.post.exec qui va avec l'Assign Task, qui nous permet d'être au courant quand cette méthode a terminé. Donc, je résume : on lance notre Assign Task, celle-ci exécute la méthode doingbackground dans un srt séparé, une fois que cette méthode est terminée, le système appelle la méthode unpost.exec, sur le srt principal. Ici, on revient à une méthode où on ne peut pas exécuter des instructions longues. Par contre, je reviens sur le srt principal, je peux de nouveau, modifier l'interface graphique. Alors, regardons ce que nous avons obtenu, if-exception-différent de nul, j'ai donc obtenu une erreur. Je vais l'afficher dans ma console et je vais pouvoir maintenant mettre à jour mon Text View : .7-text-exception-getmessage, si, bien sûr, l'exception retourne un message. Sinon, je vais obtenir une array list de fields, que j'ai déjà. Attention à un détail très important : c'est ici, que la compréhension des pointeurs prend tout son sens. Il faut imaginer qu'ici, j'ai un pointeur vers une array list. je lui donne une adresse, admettons, l'adresse deux. Quand je fais ma requête, je vais avoir une autre array list, qui aura l'adresse trois. Ici, à mon adapteur, je lui transmets une array list. Je lui transmets l'array list que j'ai créée juste avant, l'adresse deux. Si, ici, je m'amuse à faire quelque chose comme ça, Qu'est-ce qui va se passer ? Mon array list qui a été créée ici, dans opendata.ws et qui aura donc l'adresse trois, je vais dire à mon pointeur d'aller pointer, non plus sur l'adresse deux mais sur la trois. Sauf qu'à mon adapteur, je lui ai dit d'aller voir l'adresse deux. Il faut bien comprendre que j'aurai deux listes. J'aurai la liste que j'ai créée au début et celle que m'a retourné open.data.ws. Si je fais cela, mon adapteur pointera sur une liste et mon contrôleur pointera sur une autre liste. Et donc, quand je vais demander à mon adapteur de se ré-afficher, qu'est-ce qu'il affichera ? L'ancienne liste. Alors que mon contrôleur, lui, manipulera la nouvelle. Donc, pour palier à ça, il ne faut jamais faire ça. Il ne fait jamais ré-assigner une array list. Le plus simple, c'est de vider la liste existante : grâce à l'instruction Clear, donc, j'enlève tout ce qui a dedans et je vais faire un add-on, qui veut dire, j'ajoute tous les éléments de la nouvelle liste dans ma liste actuelle. J'ai donc mon adapteur et mon contrôleur qui travaillent toujours sur la même liste. Et je peux faire un notifydatasection pour indiquer que j'ai changé ma liste. Je vous rappelle, qu'actuellement, notre méthode getfield du serveur ne renvoie rien. Nous n'avons pas encore fait le parsing, ce sera dans une autre séquence. Avant de pouvoir tester notre srt, lors du clic, il va falloir créer une Assign Task, donc, créer un nouveau srt et la lancer. Attention, ne surtout pas faire ça ! Si je fais mon assigntask.background, c'est moi qui exécute cette méthode. Donc, si c'est moi qui lance cette méthode elle sera exécutée sur le srt principal. Car ici, le clic est sur le srt principal. Là, ce qu'il faut faire, c'est utiliser la méthode exécute, qui est proposée par la classe Assign Task et le système derrière ira créer le nouveau srt et appellera la méthode doingbackground dedans. Voilà, donc là, maintenant, quand je vais cliquer, je vais créer un nouveau srt,le lancer, le système créera le srt, derrière, il appellera la méthode doingbackground, une fois qu'il aura fini, le srt sera terminé, il appellera la méthode unpost.exec sur le srt principal, je vérifierai si j'ai une exception ou non, je mettrai à jour ma liste à partir de la liste reçue. Et sans changer de pointeur. Testons. J'appuie sur Charger, je vais dans ma console, je vais donc tout en bas et ici, j'ai bien mon tag, je vais écrire Tag,pour que cela apparaisse mieux et voilà. Donc là, j'ai bien mon tag avec toute ma ligne. Elle sera très longue, forcément, il y a beaucoup de choses. Vous avez donc maintenant, réalisé une requête web sur un srt séparé.

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
Date de parution :24 avr. 2017

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 !