Connexion et récupération de donnée en liaison HTTP avec conversion en chaine de caractère

Connexion et récupération de donnée en liaison HTTP avec conversion en chaine de caractère

Il est souvent nécessaire de récupérer les nouvelles données pour son application sur le réséau Internet. En développement Android, il existe de nombreuses classes pour gérer et utiliser des connexions HTTP. Nous allons apprendre à tester la connectivité de l'appareil et récupérer des données par connexion HTTP pour les convertir en un String.

http android connexion

Manifest

Tout d'abord il faut ajouter deux permissions à notre application :

Ses deux permissions sont à ajouter au fichier manifest.xml.

 

Tester la connectivité

Il est important de tester si le smartphone ou la tablette est connecté au réseau Internet, soit par réseau Wifi ou réseau 3G. Pour cela il faut utiliser l'objet ConnectivityManager :

Ce test peut être réaliser depuis le Thread principal de notre application. Dans l'exemple précédent, on récupère l'objet ConnectivityManager par rapport au Context actuelle. Ensuite on récupère l'objet NetworkInfo via la fonction getActiveNetworkInfo().

Avec cette objet on peut testé si le smarpthone est connecté via la fonction isConnected() de notre objet NetworkInfo. Ensuite, deux possibilités :

  1. Si la connexion existe : on appel la tâche asynchrone qui sert à la connexion HTTP avec comme paramètre l'url pour récupèrer les données.
  2. Sinon on affiche le message comme quoi la connexion n'existe pas.
Le test de la connexion peut être réaliser dans le thread principal car il n'est pas bloquant, par contre la connexion et récupération de donnée par HTTP nécessite l'utilisation d'un Thread différent, d'où l'utilisation d'une tâche asynchrone.

 

La connexion et la récupération de donnée

Il existe deux possibilités pour les actions HTTP : l'objet HttpClient et HttpURLConnection.
  1. HttpClient est fournit par Apache et est compatible depuis la version Eclair (2.1).
  2. HttpURLConnection est fournit par Java et est en développement très actif. Il est compatible depuis la version Gingerbread et utilise de la compression et du cache ce qui permet de réduire le volume de donnée transmis. Donc on gagne en rapidité et en autonomie.
Au final la deuxième solution est à priviligier pour les nouvelles applications et c'est ce qui sera presenté ci-dessous. Si vous voulez, un exemple du premier choix est disponible ici.

  • La connexion se réalise donc par un objet URL, qui retourne ensuite un objet de type HttpURLConnection via la fonction openConnection()
  • Ensuite on peut paramètrer notre connexion (optionnelle), de nombreux paramètres existent. Une fois paramètrer on peut lancer la connexion  avec la fonction connect() de HttpURLConnection.
  • On peut récupérer le code de réponse avec la fonction getResponseCode() de HttpURLConnection.
  • On récupère ensuite le flux de donnée avec la fonction getInputStream().
  • On prévoit qu'a la fin ou en cas d'erreur, de déconnecter l'application et de fermer l'InputStream.

 

Conversion de l'InputStream en String

La fonction readIt aura pour but de convertir l'InputStream en String :

  • On récupère notre InputStream pour le convertir en InputStreamReader
  • Puis on convertie notre InputStreamReader en BufferedReader
  • Ensuite on lit chaque ligne retourné pour les insérer dans notre StringBuilder avec un '\n' pour bien prendre en compte le retour à la ligne.
  • Et enfin on retourne notre StringBuilder convertie en String

 

Pour aller plus loin

Lancer la connexion dans le thread principal

Cette pratique, fortement déconseillée est tout de même réalisable :

 

Ecrire des données

Il est aussi possible d'écrire des données via une connexion HTTP :

 

L'authentification HTTP

On peut aussi s'authentifier :

 

Et tout le reste

Il faut savoir que l'on peut aussi :

  • Utiliser les Cookies
  • Utiliser d'autre méthode que GET
  • Utiliser le cache pour les réponses HTTP
  • Utiliser des Proxies

Tout ceci est expliqué sur la documentation officielle d'Android : lien