SlideShare a Scribd company logo
1 of 9
Download to read offline
TP-Bonus
Web Services
Développement d’Applications Mobiles avec Android
M2 MP2L - DL


TP BONUS - ANDROID MME. LILIA SFAXI 1
Objectifs du TP
Interrogation de services web REST à partir de votre application Android avec la
bibliothèque Retrofit
I. Retrofit
Retrofit est un client REST pour Android et Java, permettant de grouper et organiser
1
toutes vos APIs de manière simple et propre.
Les annotations sont utilisées pour contrôler les paramètres d’appel de l’API, définies
dans des interfaces, que vous appelez à partir de classes.
Toutes les APIs http sont représentées sous forme d’interfaces, comme suit :
1. Déclaration d’APIs
Chaque méthode doit avoir une annotation http qui fournit la méthode utilisée ainsi
que l’URL. 5 annotations sont fournies : GET, POST, PUT, DELETE et HEAD. Voici un
exemple d’appel :
Il est possible de spécifier les paramètres de la requête dans l’URL :
Pour un remplacement dynamique de blocs et de paramètres dans la méthode, utiliser :
{}, puis référencer ce bloc avec l’annotation @PATH, comme suit :
Retrofit : http://square.github.io/retrofit/
1
TP BONUS - ANDROID MME. LILIA SFAXI 2
Il est également possible d’utiliser des paramètres de requêtes (query parameters)
comme suit :
L’URL résultante sera alors comme suit :
group/id_val/users ?sort=sort_val
Pour insérer plusieurs paramètres de requête à la fois, utiliser une Map:
Consulter le site de Retrofit pour plus d’exemples d’utilisation de Retrofit.
2. Format de Données
Par défaut, Retrofit peut seulement dé-sérialiser les HTTP bodies en objets
ResponseBody de la bibliothèque OkHttp, et n’accepte les requêtes que sous format
RequestBody pour le @Body.
Cependant, un ensemble de convertisseurs sont disponibles pour supporter d’autres
types, dont Gson. Gson est une librairie Java utilisée pour convertir les objets Java en
leur représentation JSON, et vice-versa.
Pour supporter Retrofit, il faut d’abord ajouter deux dépendances :
1. Librairie Retrofit
2. Gson
Activité 1. Créer un projet Android TP5. Ajouter les dépendances pour Retrofit et
gson dans le fichier build.gradle (du Module), en insérant les lignes suivantes dans la
partie dependencies:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.google.code.gson:gson:2.6.2'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
TP BONUS - ANDROID MME. LILIA SFAXI 3
N’oubliez pas de synchroniser le projet pour que les dépendances soient prises en
compte !
IV. Exercice : Accès à un Service Web
1. Objectif
Durée estimée de l’exercice : 2h
L’objectif de ce TP est de réaliser une application android qui accède à des données
2
provenant d’un service web externe.
2. Génération des classes POJO à partir des données JSON
Le service web que nous appelons est un service public de consultation de météo.
Pour consulter la météo actuelle àTunis, nous utilisons l’URI suivante :
h t t p : / / a p i . o p e n w e a t h e r m a p . o r g / d a t a / 2 . 5 / w e a t h e r ?
q=Tunis&APPID=17db59488cadcad345211c36304a9266
La réponse obtenue ressemble à la suivante :
Largement inspiré de : http://www.androidwarriors.com/2015/08/retrofit-android-example-web-
2
services.html
TP BONUS - ANDROID MME. LILIA SFAXI 4
TP BONUS - ANDROID MME. LILIA SFAXI 5
Pour obtenir un APPID valide, il suffit de s’inscrire sur le site http://
openweathermap.org , un APPID sera généré pour vous, vous le trouverez dans votre
profil. Il suffira ensuite de remplacer le APPID de l’URI précédente par la votre.
Une fois une réponse valide obtenue, sous la forme d’un document JSON comme le
montre la figure précédente, il est possible de générer les classes POJO que vous allez
utiliser pour manipuler les données du service web à votre guise.
Pour cela :
• Aller au site : http://www.jsonschema2pojo.org/
• Coller le document JSON, que vous obtenez en tapant l’URI dans le navigateur, dans
la case de gauche
• Indiquer dans la colonne de droite le nom de package que vous choisissez (par
exemple com.weather), le nom de la classe principale (par exemple Model), JSON
comme type source, et Gson comme style d’annotation, comme suit :
• Cliquer sur Zip pour télécharger le projet contenant les classes générées.
• Copier ensuite les classes téléchargées sous un nouveau package POJO de votre
répertoire source :
TP BONUS - ANDROID MME. LILIA SFAXI 6
3. Création de l’interface
Commencer par créer une interface comportant 4 champs de texte, intitulés
respectivement txt_city, txt_status, txt_humidity et txt_press.
Ajouter également, dans le fichier Manifest, la permission d’accès à internet :
<uses-permission android:name="android.permission.INTERNET"/>
4. Interface RestInterface
• Créer une interface appelée RestInterface dans votre projet. Cette interface
permettra de mapper une URI donnée à un appel de méthode, grâce aux
annotations fournies par l’API Retrofit.
• Pour obtenir la météo deTunis, le code de RestInterface devra être comme suit :
Vous remarquerez ici que l’URI commence par weather. En effet, le path principal sera
indiqué dans la classe principale, lors de l’appel du service.
5. Retrofit Builder
Dans la même classe RestInterface, créer un Retrofit Builder pour construire la requête:
TP BONUS - ANDROID MME. LILIA SFAXI 7
L’URL utilisée ici est une chaîne statique représentant l’URL principale fixe du web
service:
http://api.openweathermap.org/data/2.5/
6. Appel au service
Pour faire appel au service, aller dans la classe de votre activité principale (pour mon
cas : MainActivity.java) et suivre les étapes suivantes :
• Créer lesTextViews appropriés.
• Créer un objet RestInterface:
• Appeler le service:
• La fonction getWeatherReport, définie dans l’interface, est une fonction asynchrone,
elle doit donc implémenter deux fonctions de callback : en cas de succès et en cas
d’échec. Son appel sera comme suit :
TP BONUS - ANDROID MME. LILIA SFAXI 8
Activité 2. Lancer le projet que vous avez créé. Bien vérifier que vous disposez d’une
connexion internet, et que le APPID défini dans votre URI est valide (pour cela, tester
l’URI donnée dans II.2 directement dans le navigateur).
7. Ajout de paramètres
Nous aimerions maintenant que l’appel au web service soit paramétré. C’est à dire que
le nom de la ville dont on va afficher la météo sera passé en paramètre à l’appel de la
fonction getWeatherReport, et non pas en dur directement dans RestInterface.
Activité 3. Ajouter un paramètre à la fonction getWeatherReport. Attention, la
fonction de Callback doit toujours être le dernier paramètre défini !
8. Liste de Choix
Pour obtenir le résultat final, comme montré dans la partie II.1, il faut définir une liste
déroulante (spinner), dans lequel on trouvera les noms des villes dont nous voulons
afficher la météo.
Activité 4. Ajouter une liste déroulante à votre activité. Insérer les noms des villes de
votre choix (pour moi, c’étaitTunis, London et Paris). Modifier votre code de façon à ce
que l’appel au service web change selon le nom de la ville sélectionnée.
TP BONUS - ANDROID MME. LILIA SFAXI 9

More Related Content

What's hot

Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETLLilia Sfaxi
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1Sem Koto
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReportLilia Sfaxi
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_threadSaber LAJILI
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWSLilia Sfaxi
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRSLilia Sfaxi
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataLhouceine OUHAMZA
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de donnéesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 

What's hot (20)

Tp2 - Latex
Tp2 - LatexTp2 - Latex
Tp2 - Latex
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
Tp4 - PHP
Tp4 - PHPTp4 - PHP
Tp4 - PHP
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
Reporting avec JasperServer & iReport
Reporting avec JasperServer & iReportReporting avec JasperServer & iReport
Reporting avec JasperServer & iReport
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
4 asynch task_services_thread
4 asynch task_services_thread4 asynch task_services_thread
4 asynch task_services_thread
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Tp1 - WS avec JAXWS
Tp1 - WS avec JAXWSTp1 - WS avec JAXWS
Tp1 - WS avec JAXWS
 
Tp1 - Eclipse
Tp1 - EclipseTp1 - Eclipse
Tp1 - Eclipse
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Guide talend
Guide talendGuide talend
Guide talend
 
575
575575
575
 
Point Base Uni Sync
Point Base Uni SyncPoint Base Uni Sync
Point Base Uni Sync
 
Formation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-dataFormation jpa-hibernate-spring-data
Formation jpa-hibernate-spring-data
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de données
 
Rapport tp1 j2ee
Rapport tp1 j2eeRapport tp1 j2ee
Rapport tp1 j2ee
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 

Similar to Android - TPBonus - web services

Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...MOHAMMED MOURADI
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniterAtsé François-Xavier KOBON
 
Cahier de charges Site web DRUPAL
Cahier de charges Site web DRUPALCahier de charges Site web DRUPAL
Cahier de charges Site web DRUPALLaribi Aicha
 
Paris ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesGuillaume Gérard
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Philippe Sfeir
 
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuPublicis Sapient Engineering
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de JhipsterKokou Gaglo
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPressChi Nacim
 
Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Nazih Heni
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus MarcusMarc NGIAMBA
 
Projet fin annee 2011 master min ISAMM
Projet fin annee 2011 master min ISAMMProjet fin annee 2011 master min ISAMM
Projet fin annee 2011 master min ISAMMAbdelmonem NAAMANE
 

Similar to Android - TPBonus - web services (20)

Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
Rapport application web (Spring BOOT,angular4) et mobile(ionc3) gestion des a...
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
#J2Code2018 - Mettez du feu à vos applications avec CodeIgniter
 
Cahier de charges Site web DRUPAL
Cahier de charges Site web DRUPALCahier de charges Site web DRUPAL
Cahier de charges Site web DRUPAL
 
Paris ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websitesParis ember js lab #6 - Taking over server-side rendering websites
Paris ember js lab #6 - Taking over server-side rendering websites
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013Tableau de bord Yammer sous SharePoint 2013
Tableau de bord Yammer sous SharePoint 2013
 
Tuto bada
Tuto badaTuto bada
Tuto bada
 
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic LadeuXebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
XebiCon'17 : Entrevue avec Vue.js - Thomas Champion et Ludovic Ladeu
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Prise en main de Jhipster
Prise en main de JhipsterPrise en main de Jhipster
Prise en main de Jhipster
 
Développement d’extensions WordPress
Développement d’extensions WordPressDéveloppement d’extensions WordPress
Développement d’extensions WordPress
 
Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"Asp.net Tutorials de L'application "Organizer"
Asp.net Tutorials de L'application "Organizer"
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Catalogue PFE 2019
Catalogue PFE 2019Catalogue PFE 2019
Catalogue PFE 2019
 
Cloud & Google app engine Presentation by Ngiambus Marcus
 Cloud & Google app engine Presentation  by Ngiambus Marcus Cloud & Google app engine Presentation  by Ngiambus Marcus
Cloud & Google app engine Presentation by Ngiambus Marcus
 
Projet fin annee 2011 master min ISAMM
Projet fin annee 2011 master min ISAMMProjet fin annee 2011 master min ISAMM
Projet fin annee 2011 master min ISAMM
 
cours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdfcours-gratuit.com--id-4422.pdf
cours-gratuit.com--id-4422.pdf
 
[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker[Tuto] Big datatrack : Web Tracker
[Tuto] Big datatrack : Web Tracker
 

More from Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 

More from Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Lab3-Android
Lab3-AndroidLab3-Android
Lab3-Android
 
Lab 5-Android
Lab 5-AndroidLab 5-Android
Lab 5-Android
 

Android - TPBonus - web services

  • 1. TP-Bonus Web Services Développement d’Applications Mobiles avec Android M2 MP2L - DL 
 TP BONUS - ANDROID MME. LILIA SFAXI 1 Objectifs du TP Interrogation de services web REST à partir de votre application Android avec la bibliothèque Retrofit
  • 2. I. Retrofit Retrofit est un client REST pour Android et Java, permettant de grouper et organiser 1 toutes vos APIs de manière simple et propre. Les annotations sont utilisées pour contrôler les paramètres d’appel de l’API, définies dans des interfaces, que vous appelez à partir de classes. Toutes les APIs http sont représentées sous forme d’interfaces, comme suit : 1. Déclaration d’APIs Chaque méthode doit avoir une annotation http qui fournit la méthode utilisée ainsi que l’URL. 5 annotations sont fournies : GET, POST, PUT, DELETE et HEAD. Voici un exemple d’appel : Il est possible de spécifier les paramètres de la requête dans l’URL : Pour un remplacement dynamique de blocs et de paramètres dans la méthode, utiliser : {}, puis référencer ce bloc avec l’annotation @PATH, comme suit : Retrofit : http://square.github.io/retrofit/ 1 TP BONUS - ANDROID MME. LILIA SFAXI 2
  • 3. Il est également possible d’utiliser des paramètres de requêtes (query parameters) comme suit : L’URL résultante sera alors comme suit : group/id_val/users ?sort=sort_val Pour insérer plusieurs paramètres de requête à la fois, utiliser une Map: Consulter le site de Retrofit pour plus d’exemples d’utilisation de Retrofit. 2. Format de Données Par défaut, Retrofit peut seulement dé-sérialiser les HTTP bodies en objets ResponseBody de la bibliothèque OkHttp, et n’accepte les requêtes que sous format RequestBody pour le @Body. Cependant, un ensemble de convertisseurs sont disponibles pour supporter d’autres types, dont Gson. Gson est une librairie Java utilisée pour convertir les objets Java en leur représentation JSON, et vice-versa. Pour supporter Retrofit, il faut d’abord ajouter deux dépendances : 1. Librairie Retrofit 2. Gson Activité 1. Créer un projet Android TP5. Ajouter les dépendances pour Retrofit et gson dans le fichier build.gradle (du Module), en insérant les lignes suivantes dans la partie dependencies: compile 'com.squareup.retrofit2:retrofit:2.1.0' compile 'com.google.code.gson:gson:2.6.2' compile 'com.squareup.retrofit2:converter-gson:2.1.0' TP BONUS - ANDROID MME. LILIA SFAXI 3
  • 4. N’oubliez pas de synchroniser le projet pour que les dépendances soient prises en compte ! IV. Exercice : Accès à un Service Web 1. Objectif Durée estimée de l’exercice : 2h L’objectif de ce TP est de réaliser une application android qui accède à des données 2 provenant d’un service web externe. 2. Génération des classes POJO à partir des données JSON Le service web que nous appelons est un service public de consultation de météo. Pour consulter la météo actuelle àTunis, nous utilisons l’URI suivante : h t t p : / / a p i . o p e n w e a t h e r m a p . o r g / d a t a / 2 . 5 / w e a t h e r ? q=Tunis&APPID=17db59488cadcad345211c36304a9266 La réponse obtenue ressemble à la suivante : Largement inspiré de : http://www.androidwarriors.com/2015/08/retrofit-android-example-web- 2 services.html TP BONUS - ANDROID MME. LILIA SFAXI 4
  • 5. TP BONUS - ANDROID MME. LILIA SFAXI 5
  • 6. Pour obtenir un APPID valide, il suffit de s’inscrire sur le site http:// openweathermap.org , un APPID sera généré pour vous, vous le trouverez dans votre profil. Il suffira ensuite de remplacer le APPID de l’URI précédente par la votre. Une fois une réponse valide obtenue, sous la forme d’un document JSON comme le montre la figure précédente, il est possible de générer les classes POJO que vous allez utiliser pour manipuler les données du service web à votre guise. Pour cela : • Aller au site : http://www.jsonschema2pojo.org/ • Coller le document JSON, que vous obtenez en tapant l’URI dans le navigateur, dans la case de gauche • Indiquer dans la colonne de droite le nom de package que vous choisissez (par exemple com.weather), le nom de la classe principale (par exemple Model), JSON comme type source, et Gson comme style d’annotation, comme suit : • Cliquer sur Zip pour télécharger le projet contenant les classes générées. • Copier ensuite les classes téléchargées sous un nouveau package POJO de votre répertoire source : TP BONUS - ANDROID MME. LILIA SFAXI 6
  • 7. 3. Création de l’interface Commencer par créer une interface comportant 4 champs de texte, intitulés respectivement txt_city, txt_status, txt_humidity et txt_press. Ajouter également, dans le fichier Manifest, la permission d’accès à internet : <uses-permission android:name="android.permission.INTERNET"/> 4. Interface RestInterface • Créer une interface appelée RestInterface dans votre projet. Cette interface permettra de mapper une URI donnée à un appel de méthode, grâce aux annotations fournies par l’API Retrofit. • Pour obtenir la météo deTunis, le code de RestInterface devra être comme suit : Vous remarquerez ici que l’URI commence par weather. En effet, le path principal sera indiqué dans la classe principale, lors de l’appel du service. 5. Retrofit Builder Dans la même classe RestInterface, créer un Retrofit Builder pour construire la requête: TP BONUS - ANDROID MME. LILIA SFAXI 7
  • 8. L’URL utilisée ici est une chaîne statique représentant l’URL principale fixe du web service: http://api.openweathermap.org/data/2.5/ 6. Appel au service Pour faire appel au service, aller dans la classe de votre activité principale (pour mon cas : MainActivity.java) et suivre les étapes suivantes : • Créer lesTextViews appropriés. • Créer un objet RestInterface: • Appeler le service: • La fonction getWeatherReport, définie dans l’interface, est une fonction asynchrone, elle doit donc implémenter deux fonctions de callback : en cas de succès et en cas d’échec. Son appel sera comme suit : TP BONUS - ANDROID MME. LILIA SFAXI 8
  • 9. Activité 2. Lancer le projet que vous avez créé. Bien vérifier que vous disposez d’une connexion internet, et que le APPID défini dans votre URI est valide (pour cela, tester l’URI donnée dans II.2 directement dans le navigateur). 7. Ajout de paramètres Nous aimerions maintenant que l’appel au web service soit paramétré. C’est à dire que le nom de la ville dont on va afficher la météo sera passé en paramètre à l’appel de la fonction getWeatherReport, et non pas en dur directement dans RestInterface. Activité 3. Ajouter un paramètre à la fonction getWeatherReport. Attention, la fonction de Callback doit toujours être le dernier paramètre défini ! 8. Liste de Choix Pour obtenir le résultat final, comme montré dans la partie II.1, il faut définir une liste déroulante (spinner), dans lequel on trouvera les noms des villes dont nous voulons afficher la météo. Activité 4. Ajouter une liste déroulante à votre activité. Insérer les noms des villes de votre choix (pour moi, c’étaitTunis, London et Paris). Modifier votre code de façon à ce que l’appel au service web change selon le nom de la ville sélectionnée. TP BONUS - ANDROID MME. LILIA SFAXI 9