Les webservices sont des services de traitement de la donnée exposée
sur internet, ils peuvent avoir plusieurs formes, provenir de plusieurs
sites différents, faire des tâches diverses et être privés ou publiques.--> Exemples :
- Données météorologique
- Calcul mathématique
- Stockage d’informations
- Etc…
Nous allons nous intéresser plus précisément aux services retournant des données en JSON (JavaScript Object Notation).
Pourquoi le Json ? Et bien pour une question de facilité, bien entendue vous pouvez utiliser le XML aussi, mais le Json à la particularité d’être plus léger que XML, un gain de poids n’est pas anondin dans le domaine de la mobilité.
Pré-requis :
Création d’un projet Android de type standard.Le webservice de test
--> http://testwebapi.lalimace.fr/api/PointCe service est développé en .Net sous forme de WebApi.
Cette url retourne une liste de point géographique comportant les éléments suivants :
- Adress : Adresse du lieu
- City : Ville
- PostalCode : Code postal
- Latitude : Latitude
- Longitude : Longitude
Notre application va être structurée de la manière suivante
- Vue (xml)
- ListView
- ArrayAdapter
- Client pour le webservice
- Modèle de données
--> http://code.google.com/p/google-gson/
Appel au WebService
Nous allons créer une classe pour effectuer nos appelsExemple : WebService.java
Nous retrouverons les éléments suivants dans notre classe
- La base de l’url pour le webservice
- L’objet Gson
- Un constructeur
- Une méthode private pour se connecter en Http au WebService et récupérer un inputStream
- Des méthodes pour chaque API disponible
public class WebService {
private final String URL = "http://testwebapi.lalimace.fr/api/Point";
Gson gson;
public WebService() {
gson = new Gson();
}
private InputStream sendRequest(URL url) throws Exception {
try {
// Ouverture de la connexion
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
// Connexion à l'url
urlConnection.connect();
// Si le serveur nous répond avec un code OK
if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
return urlConnection.getInputStream();
}
} catch (Exception e) {
throw new Exception("");
}
return null;
}
public List<Point> getPoints() {
try {
// Envoie de la requête
InputStream inputStream = sendRequest(new URL(URL));
// Vérification de l'inputStream
if(inputStream != null) {
// Lecture de l'inputStream dans un reader
InputStreamReader reader = new InputStreamReader(inputStream);
// Return la liste désérialisé par le moteur gson
return gson.fromJson(reader, new TypeToken<List<Point>>(){}.getType());
}
} catch (Exception e) {
Log.e("WebService", "Impossible de rapatrier les données :(");
}
return null;
}
}
sendRequest sera notre méthode générique pour appeler via un objet
HttpUrlConnection le webservice, ici on se contente de faire un simple
appel de type GET sur une URL.Le résultat retourné est toujours un InputStream que nous allons pouvoir traiter, nous pouvons avoir plusieurs types de données retournées par un webservice (XML,JSON,Image,Excel, etc…).
Le type InputStream est facilement manipulable avec le Reader qui va bien.
Notre cas se porte uniquement sur le JSON.
Nous avons aussi besoin d’un modèle, le flux étant de type JSON il faut désérialisé celui-ci pour le transformer en un objet exploitable facilement.
Nous allons donc créer un fichier Point.java dans lequel il contiendra les informations suivantes :
- Les propriétés
- Les accesseurs
Voici le code
package com.aceart.formationwebservice.model;
public class Point {
int ID;
String Address;
String City;
String PostalCode;
float Latitude;
float Longitude;
public int getID() {
return ID;
}
public void setID(int iD) {
ID = iD;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getCity() {
return City;
}
public void setCity(String city) {
City = city;
}
public String getPostalCode() {
return PostalCode;
}
public void setPostalCode(String postalCode) {
PostalCode = postalCode;
}
public float getLatitude() {
return Latitude;
}
public void setLatitude(float latitude) {
Latitude = latitude;
}
public float getLongitude() {
return Longitude;
}
public void setLongitude(float longitude) {
Longitude = longitude;
}
}
Avec la librairie GSon tout se fait en une ligne pour transformer l’inputStream en Objetreturn gson.fromJson(reader, new TypeToken<List<Point>>(){}.getType());
A partir de la vous obtenez donc une liste d’objets provenant d’un webservice retournant du JSon.Conclusion
Vous trouverez les sources de la démo en bas de l’article, contenant la partie affichage avec l’ArrayAdapter et la ListView, je ne vais pas m’attarder sur ces deux points car nous les avons déjà vus dans d’autres cours.Dans un prochain tutoriel nous aborderons l’utilisation du Spring Framework qui permet d’utiliser des WebServices de type REST facilement.
Enregistrer un commentaire