Java pour les développeurs Android

Réaliser une requête web

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Ici, vous effectuerez une requête web à l'aide de la librairie OkHttp. Vous aborderez également les permissions sous Android, qui autorisent l'accès de votre application à Internet.
10:52

Transcription

Dans cette vidéo je vais vous montrer comment réaliser une requête en Java. Il existe un objet HttpConnexion qui permet de faire cela. mais je vais plutôt vous montrer comment fonctionne la librairie OkHttp. Celle-ci est plus simple et surtout beaucoup plus performante. Elle a été écrite par Jake Wharton, un développeur de chez Square qui a écrit de nombreuses librairies pour Android qui sont beaucoup utilisées dans la communauté. Alors comment fonctionne la librairie OkHttp ? Donc ici on a deux morceaux de code, une, permettant de réaliser une requête en get, une permettant de réaliser une requête en post. Dans notre cas, nous allons réaliser une requête en get. Donc nous allons partir sur ce template là. Sans rentrer dans les détails très techniques, la différence entre une requête en get et en post, c'est qu'en get nous passons une URL et nous avons une réponse, donc comme nous faisons ici ici nous transmettons une URL et nous retournons une réponse. Une requête en post nous allons transmettre simplement une URL qui ne contiendra que l'URL du serveur mais par contre tous les arguments seront transmis dans l'objet représentant la requête. Par exemple, pour expliquer avec mon webservice, ici nous avons une URL complète, tous les arguments sont dans l'URL. J'ai le dataset=, j'ai le facet=, voilà tout est dans mon URL. Je lance ma requête, et j'ai ma réponse. C'est une requête en get. Avec une requête en post il faut bien sûr que le serveur soit adapté à recevoir une requête en post, j'aurais simplement transmis cette URL et dans l'objet de la requête j'aurais transmis tous mes paramètres. Alors quel intérêt d'avoir du post plutôt que du get ? Et bien imaginons que je transmette un mot de passe, je me retrouve avec mon mot de passe écrit dans mon URL. Quand vous réalisez une requête en HTTPS, l'objet que vous envoyez dans votre requête est crypté. Mais pas l'URL, ce qui veut dire que votre mot de passe reste en clair. Voilà rapidement la différence entre du get et du post. Alors pour intégrer OkHttp à notre projet. Nous allons chercher le lien gradle. Dans le build.gradle nous allons intégrer notre ligne. Cliquez sur le sync now, ça a téléchargé notre librairie. Dans notre package model, où on va chercher les informations et où on dit à quoi elles ressemblent, nous avons nos beans. Nous allons créer un package webservice et créer une classe OkHttpUtils. Cette classe OkHttpUtils va nous permettre d'effectuer des requêtes. À l'intérieur et à partir de la documentation j'ai écrit une méthode statique. Donc pour l'utiliser OkHttpUtils.sendOkHttpRequest. Nous sommes partis sur du get. Je lui transmets l'URL, je vous explique rapidement comment tout cela fonctionne sans trop rentrer dans les détails. Je crée un objet OkHttpClient, je créer mon objet requête auquel je transmets mon URL. À mon client je lui demande d'exécuter cette requête donc je lui transmets la requête et je lui appelle la méthode execute qui lance l'envoi de la requête. Cette instruction peut prendre jusqu'à soixante secondes si par exemple le serveur ne répond pas et qu'on a mis un timeout de soixante secondes. Donc tant que je n'ai pas de réponse je reste bloqué sur cette instruction. Une fois que j'ai ma réponse, le serveur me renvoie un objet réponse que je stocke dans mon objet réponse. Ma réponse contient un code de retour, donc le code 200, récupérable ici, donc dans le fameux objet HttpURLConnection. Qui indique que tout s'est bien passé donc si tout ne s'est pas bien passé donc si c'est différent du code 200 je peux retourner une exception indiquant que ça ne s'est pas bien passé. Le fait de retourner une exception je l'indique en signature de méthode comme quoi je retourne une exception. Il n'y a pas que cette partie là qui renvoie une exception. Le reste du code peut retourner différents types d'exceptions. Si ça s'est bien passé, je prends mon objet réponse, je récupère le corps de son message, c'est-à-dire l'ensemble du EnJason et je le convertis en chaîne de caractères. Ceci me retournera donc cette chaîne de caractères. Si je lui transmets cette URL. Voilà pour l'utilisation d'OkHttp. Réalisons donc maintenant une classe qui va effectuer nos requêtes. Cette classe là est l'outil pour faire des requêtes. Maintenant nous allons faire la classe qui lui dit quelle requête faire. Donc dans mon modèle je vais créer une nouvelle classe que je vais appeler OpenDataWS pour webservice. Et à l'intérieur je vais pouvoir y mettre toutes mes méthodes qui font des requêtes. Par exemple si j'avais un serveur qui me renverrait une élève, j'écrirais ma méthode get élève et ainsi de suite. Donc là en l'occurrence nous ce qu'on veut c'est public static, pour éviter d'avoir à créer une instance d'OpenDataWS alors qu'on n'aura pas spécialement d'attribut, une ArrayList de Fields. Et je vais l'appeler getFieldsDuServeur. Je ne lui transmets pas d'URL et non, le but du contrôleur c'est de demander au modèle « donne-moi la liste des Fields que je puisse les afficher. » C'est pas au contrôleur de savoir l'URL, c'est au modèle d'organiser ça, c'est son travail à lui, justement d'aller chercher les données. Et de les parser, et de lui redonner pour que le contrôleur n'ait qu'à prendre les données et les donner à l'IHM pour qu'elle les affiche. Quelles sont les différentes étapes ? Il va falloir déjà trouver l'URL. L'URL c'est facile, on l'a. Je vais stocker mon URL dans une variable statique. Final, car elle ne changera pas, et c'est un String. Voilà, donc j'ai mon URL. Maintenant que j'ai mon URL je vais devoir effectuer ma requête. Je vais donc utiliser l'objet OkHttpUtils.sendOkHttpRequest dans lequel je lui transmets ma requête. Ici, j'ai une requête qui n'a pas besoin d'argument, mais admettons que je ferais la même chose pour récupérer un élève en particulier du serveur, bah je pourrais très bien ici avoir l'ID de l'élève que je veux récupérer et je transmettrais à OkHttpUtils l'URL complète. Donc cet objet va nous retourner un string qui sera notre réponse EnJason. Ici j'ai une erreur, normal ma méthode retourne une exception. Du moins, elle peut retourner une exception, c'est pas obligatoire. Mais comme elle peut retourner une exception il faut gérer le cas. Je vais donc faire un Add exception to method signature. Pourquoi je retourne l'exception ? Tout simplement parce que le modèle n'est pas au courant de ce qu'il faut faire en cas d'erreur. C'est le contrôleur qui va gérer l'affichage, c'est-à-dire le contrôleur reçoit une erreur, et en fonction de l'erreur, il pourra dire ce qu'il en fait, qu'est-ce qu'il affiche. Mais le modèle lui n'est pas là pour gérer les erreurs, juste pour prévenir qu'il y en a une. Je me contente donc de retourner une erreur. Maintenant que j'ai ma réponse, avant de passer à la suite, je vais me contenter d'afficher le résultat dans la console. Et pour le moment, je vais faire un return de new ArayList. Je ne parse pas le résultat, pour l'instant je renvoie une liste vide. Je retourne du côté de mon activité. Et lors du clic sur le bouton, au lieu d'ajouter un champ vide, nous allons simplement lancer cette requête. Ici je me retrouve donc à devoir gérer les erreurs, je suis bien dans le contrôleur. Donc ALT+entrée, je Surround with try/catch. Si ça fonctionne, j'aurais un message dans les logs et je peux mettre un petit Toast indiquant "Ok". Si ça échoue, je vais pouvoir me servir de mon textview d'info pour y mettre mon erreur. Mon erreur est donc stockée dans le E. e.getMessage me retournera le message d'erreur. e.printStackTrace m'affichera l'exception dans la console comme on a eu quand on a eu un NullPointerException ou un OutOfBandException. Ici, je vais lancer le projet, mais avant de pouvoir le lancer il va falloir aller dans le manifeste et rajouter ce qu'on appelle une permission. C'est-à-dire que, entre le manifeste et l'application je vais devoir indiquer que mon application va sur internet, c'est comme ça que cela fonctionne sous Android. Il existe, pour tout un tas d'actions des permissions qui indiquent que votre application fait telle ou telle action. Au moment où on installe l'application, la liste de toutes les permissions demandées est indiquée, donc ici nous voulons la permission d'aller sur internet, je sélectionne donc ma permission d'aller sur internet. Donc c'est une petite chose à faire pour pouvoir faire des requêtes. Ici c'est spécifique à Android, en Java on peut faire une requête sans permission, les permissions sont propres à Android. Je vais donc lancer mon projet et là on va voir qu'il y a une erreur. Une erreur qui normalement a été citée précédemment. Je vais donc appuyer sur mon bouton et là il ne se passe rien. Je vous ai dit qu'il y avait une erreur. Mais, nous avons catché cette erreur donc l'application n'a pas crashé. Mais, je n'ai pas eu mon Toast Ok, je suis donc rentré dans cette partie ici. Et mon message ne contenait pas spécialement de messages à indiquer. Donc, au niveau de mon TextView, rien ne s'est affiché. Je vais donc aller voir dans l'android monitor pour voir la console. Et là je peux voir quelque chose qui ressemble à une stack trace. J'ai bien mon tag indiquant l'URL où j'ai fait la requête, et j'ai cette erreur ici NetworkOnMainThreadException. Qu'est-ce que c'est ? Et bien simplement c'est une sécurité qu'impose le SDCadre Android qui a interdit de faire une requête sur le thread principal. Ici nous faisons une requête sur le thread principal ça déclenche cette erreur. Pour pouvoir effectuer une requête web il va falloir créer un thread et ça nous allons le voir dans la prochaine séquence.

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 !