Accéder aux services Web via Android

Acesyde

Ce tutoriel a pour but de vous présenter l'utilisation des services Web sous Android.

Commentez ♪

- Titre : Accéder aux services Web via Android

- Auteur : Acesyde

- Parution : 23 novembre 2012

- Mise à jour : 13 janvier 2013

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 1. Les services Web

- 2. Le service Web de Test

- 3. Structure de notre application

- 4. Appel au service Web

- 5. Conclusion

- 6. Annexes

- 7. Remerciements

- 8. Liens

1 - Les services Web

Les services Web 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 publics.

Exemples :

- données météorologiques ;

- calcul mathématique ;

- stockage d'informations ;

- etc.

Les services Web peuvent être codés en plusieurs langages (C#, Java, PHP, Ruby, Python, C, etc.).

Nous allons nous intéresser plus précisément aux services retournant des données en JSON (JavaScript Object Notation).

Pourquoi le JSON ? Eh bien pour une question de facilité, bien entendu vous pouvez utiliser le XML aussi, mais le JSON a la particularité d'être plus léger que XML, un gain de poids n'est pas anodin dans le domaine de la mobilité.

2 - Le service Web de Test

Vous trouverez à ce lien le service Web de test que nous utiliserons par la suite : http://testwebapi.lalimace.fr/api/Point

Ce service est développé en .NET sous forme de Web API.

Cette URL retourne une liste de points géographiques comportant les éléments suivants :

- Adress : adresse du lieu ;

- City : ville ;

- PostalCode : code postal ;

- Latitude : latitude ;

- Longitude : longitude.

3 - Structure de notre application

Notre application va être structurée de la manière suivante :

- vue (XML) ;

- ArrayAdapter ;

- client pour le service Web ;

- modèle de données.

Nous allons aussi utiliser la bibliothèque GSON, qui permet de sérialiser/désérialiser en JSON, inutile de réinventer la roue.

Vous trouverez à ce lien le projet de la librairie GSON :

http://code.google.com/p/google-gson/

4 - Appel au service Web

Nous allons créer une classe pour effectuer nos appels.

Exemple : WebService.java

Nous retrouverons les éléments suivants dans notre classe :

- la base de l'URL pour le service Web ;

- l'objet Gson ;

- un constructeur ;

- une méthode private pour se connecter en HTTP au service Web 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 {
// Envoi 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);

// Retourne la liste désérialisée 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 service Web, 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 service Web (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érialiser celui-ci pour le transformer en un objet exploitable facilement.

Nous allons donc créer un fichier Point.java, lequel contiendra les informations suivantes :

- les propriétés ;

- les accesseurs.

Vous pouvez aussi rajouter vos propres méthodes, comme toString etc.

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 bibliothèque GSON tout se fait en une ligne pour transformer l'inputStream en Objet.

return gson.fromJson(reader, new TypeToken<List<Point>>(){}.getType());

À partir de là vous obtenez donc une liste d'objets provenant d'un service Web retournant du JSON.

5 - 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 services Web de type REST facilement.

6 - Annexes

Source : FormationWebservice

7 - Remerciements

Je tiens à remercier tout particulièrement Feanorin qui a mis ce tutoriel au format Developpez.com.
Merci également à zoom61 et ClaudeLELOUP d'avoir pris le temps de le relire et de le corriger.

8 - Liens

Tutoriel d'origine sur ace-art.fr