SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
Institut National des Sciences Appliquées et de Technologie Tunisie
Développement Android
2015-2016
TP5- CONNEXION A DES SERVICES
WEB REST AVEC RETROFIT
Dr. Lilia SFAXI
Objectifs du TP : Interrogation de services web REST à partir de votre application
Android avec la bibliothèque Retrofit.
TP5 : Services Web avec Retrofit
Page 2
I. Retrofit
Retrofit1
est un client REST pour Android et Java, permettant de grouper et organiser 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 :
I.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 :
Il est également possible d’utiliser des paramètres de requêtes (query parameters) comme suit :
1
Retrofit : http://square.github.io/retrofit/
TP5 : Services Web avec Retrofit
Page 3
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.
I.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. Librarie OKHTTP
Activité 1. Créer un projet Android TP5. Ajouter les dépendances pour Retrofit et OKHTTP dans le
fichier build.gradle, en insérant les lignes suivantes dans la partie dependencies :
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.squareup.okhttp:okhttp:2.4.0'
N’oubliez pas de synchroniser le projet pour que les dépendances soient prises en compte !
TP5 : Services Web avec Retrofit
Page 4
II. Exercice : Accès à un service web
II.1 Objectif
Durée estimée de l’exercice : 2h
L’objectif de ce TP2
est de réaliser une application android qui accède à des données provenant d’un
service web externe.
II.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 :
http://api.openweathermap.org/data/2.5/weather?q=Tunis&APPID=17db59488cadcad345211c36
304a9266
La réponse obtenue ressemble à la suivante :
2
Largement inspiré de : http://www.androidwarriors.com/2015/08/retrofit-android-example-web-services.html
TP5 : Services Web avec Retrofit
Page 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.
TP5 : Services Web avec Retrofit
Page 6
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 :
TP5 : Services Web avec Retrofit
Page 7
II.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"/>
II.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 de Tunis, 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.
II.5 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 :
TP5 : Services Web avec Retrofit
Page 8
- Ajouter un attribut appelé url, représentant le chemin fixe de votre service web
String url = "http://api.openweathermap.org/data/2.5";
- Créer un objet RestAdapter permettant d’adapter l’interface Java à une API REST :
RestAdapter adapter = new RestAdapter.Builder().setEndpoint(url).build();
- Instancier l’objet restInterface :
RestInterface restInterface = adapter.create(RestInterface.class);
- 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 :
restInterface.getWeatherReport(new Callback<Model>() {
@Override
public void success(Model w, Response response) {
city.setText("City :" + w.getName());
status.setText("Status :" + w.getWeather().get(0).getDescription());
humidity.setText("Humidity :" + w.getMain().getHumidity().toString());
pressure.setText("Pressure :" + w.getMain().getPressure().toString());
}
@Override
public void failure(RetrofitError error) {
String merror = error.getMessage();
}
});
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).
II.6 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.
TP5 : Services Web avec Retrofit
Page 9
Activité 3. Ajouter un paramètre à la fonction getWeatherReport. Attention, la fonction de Callback
doit toujours être le dernier paramètre défini !
II.7 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’était Tunis, 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.

Contenu connexe

Tendances

gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiqueOussama Yoshiki
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsLilia Sfaxi
 
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
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursLilia Sfaxi
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceLilia Sfaxi
 
Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileLilia Sfaxi
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...ENSET, Université Hassan II Casablanca
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Faycel Chaoua
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 

Tendances (20)

Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
gestion de magasin vente matériels informatique
gestion de magasin vente matériels informatiquegestion de magasin vente matériels informatique
gestion de magasin vente matériels informatique
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce  Basé sur Spring IOC MVC Security JPA HibernateSite JEE de ECommerce  Basé sur Spring IOC MVC Security JPA Hibernate
Site JEE de ECommerce Basé sur Spring IOC MVC Security JPA Hibernate
 
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...
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Android-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateursAndroid-Tp2: liste et adaptateurs
Android-Tp2: liste et adaptateurs
 
Soap, wsdl et uddi
Soap, wsdl et uddiSoap, wsdl et uddi
Soap, wsdl et uddi
 
Modele mvc
Modele mvcModele mvc
Modele mvc
 
Introduction à Laravel
Introduction à LaravelIntroduction à Laravel
Introduction à Laravel
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de Séquence
 
Chp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement MobileChp1 - Introduction au Développement Mobile
Chp1 - Introduction au Développement Mobile
 
Cours architecture
Cours architectureCours architecture
Cours architecture
 
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...Mohamed youssfi support architectures logicielles distribuées basées sue les ...
Mohamed youssfi support architectures logicielles distribuées basées sue les ...
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
 
Support POO Java Deuxième Partie
Support POO Java Deuxième PartieSupport POO Java Deuxième Partie
Support POO Java Deuxième Partie
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 

En vedette

P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à androidLilia Sfaxi
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 
P6 composants avancés
P6 composants avancésP6 composants avancés
P6 composants avancésLilia Sfaxi
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésLilia Sfaxi
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques androidLilia Sfaxi
 

En vedette (7)

P1 introduction à android
P1 introduction à androidP1 introduction à android
P1 introduction à android
 
P4 intents
P4 intentsP4 intents
P4 intents
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
P6 composants avancés
P6 composants avancésP6 composants avancés
P6 composants avancés
 
P5 stockage
P5 stockageP5 stockage
P5 stockage
 
P3 listes et elements graphiques avancés
P3 listes et elements graphiques avancésP3 listes et elements graphiques avancés
P3 listes et elements graphiques avancés
 
P2 éléments graphiques android
P2 éléments graphiques androidP2 éléments graphiques android
P2 éléments graphiques android
 

Similaire à Android-Tp5 : web services

Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Activity
ActivityActivity
Activitydido
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile AppHabib MAALEM
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpelLilia Sfaxi
 
#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
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basiczineblahib2
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web ServicesLilia Sfaxi
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: AngularHabib Ayad
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1Sem Koto
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1Sem Koto
 
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
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSRenaud Dumont
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mareValtech
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Les-Tilleuls.coop
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hoodsvuillet
 

Similaire à Android-Tp5 : web services (20)

Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Activity
ActivityActivity
Activity
 
NodeJS for Mobile App
NodeJS for Mobile AppNodeJS for Mobile App
NodeJS for Mobile App
 
Spring ioc
Spring iocSpring ioc
Spring ioc
 
eServices-Tp2: bpel
eServices-Tp2: bpeleServices-Tp2: bpel
eServices-Tp2: bpel
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Atelier gwt
Atelier gwtAtelier gwt
Atelier gwt
 
#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
 
react-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basicreact-slides.ppx (2) (1).pptx react presentation basic
react-slides.ppx (2) (1).pptx react presentation basic
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 
Partie 2: Angular
Partie 2: AngularPartie 2: Angular
Partie 2: Angular
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
React redux-tutoriel-1
React redux-tutoriel-1React redux-tutoriel-1
React redux-tutoriel-1
 
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
 
ASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJSASP.NET MVC, Web API & KnockoutJS
ASP.NET MVC, Web API & KnockoutJS
 
Node.js, le pavé dans la mare
Node.js, le pavé dans la mareNode.js, le pavé dans la mare
Node.js, le pavé dans la mare
 
Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014Diaporama du sfPot Lillois du 20 mars 2014
Diaporama du sfPot Lillois du 20 mars 2014
 
GWT : under the hood
GWT : under the hoodGWT : under the hood
GWT : under the hood
 
react-fr.pdf
react-fr.pdfreact-fr.pdf
react-fr.pdf
 

Plus de 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
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 
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
 

Plus de 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
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 
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
 

Android-Tp5 : web services

  • 1. Institut National des Sciences Appliquées et de Technologie Tunisie Développement Android 2015-2016 TP5- CONNEXION A DES SERVICES WEB REST AVEC RETROFIT Dr. Lilia SFAXI Objectifs du TP : Interrogation de services web REST à partir de votre application Android avec la bibliothèque Retrofit.
  • 2. TP5 : Services Web avec Retrofit Page 2 I. Retrofit Retrofit1 est un client REST pour Android et Java, permettant de grouper et organiser 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 : I.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 : Il est également possible d’utiliser des paramètres de requêtes (query parameters) comme suit : 1 Retrofit : http://square.github.io/retrofit/
  • 3. TP5 : Services Web avec Retrofit Page 3 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. I.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. Librarie OKHTTP Activité 1. Créer un projet Android TP5. Ajouter les dépendances pour Retrofit et OKHTTP dans le fichier build.gradle, en insérant les lignes suivantes dans la partie dependencies : compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup.okhttp:okhttp:2.4.0' N’oubliez pas de synchroniser le projet pour que les dépendances soient prises en compte !
  • 4. TP5 : Services Web avec Retrofit Page 4 II. Exercice : Accès à un service web II.1 Objectif Durée estimée de l’exercice : 2h L’objectif de ce TP2 est de réaliser une application android qui accède à des données provenant d’un service web externe. II.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 : http://api.openweathermap.org/data/2.5/weather?q=Tunis&APPID=17db59488cadcad345211c36 304a9266 La réponse obtenue ressemble à la suivante : 2 Largement inspiré de : http://www.androidwarriors.com/2015/08/retrofit-android-example-web-services.html
  • 5. TP5 : Services Web avec Retrofit Page 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.
  • 6. TP5 : Services Web avec Retrofit Page 6 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 :
  • 7. TP5 : Services Web avec Retrofit Page 7 II.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"/> II.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 de Tunis, 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. II.5 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 :
  • 8. TP5 : Services Web avec Retrofit Page 8 - Ajouter un attribut appelé url, représentant le chemin fixe de votre service web String url = "http://api.openweathermap.org/data/2.5"; - Créer un objet RestAdapter permettant d’adapter l’interface Java à une API REST : RestAdapter adapter = new RestAdapter.Builder().setEndpoint(url).build(); - Instancier l’objet restInterface : RestInterface restInterface = adapter.create(RestInterface.class); - 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 : restInterface.getWeatherReport(new Callback<Model>() { @Override public void success(Model w, Response response) { city.setText("City :" + w.getName()); status.setText("Status :" + w.getWeather().get(0).getDescription()); humidity.setText("Humidity :" + w.getMain().getHumidity().toString()); pressure.setText("Pressure :" + w.getMain().getPressure().toString()); } @Override public void failure(RetrofitError error) { String merror = error.getMessage(); } }); 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). II.6 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.
  • 9. TP5 : Services Web avec Retrofit Page 9 Activité 3. Ajouter un paramètre à la fonction getWeatherReport. Attention, la fonction de Callback doit toujours être le dernier paramètre défini ! II.7 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’était Tunis, 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.