Création de la tâche Asynchrone et connexion HTTP - ListViewJson
ListViewJson 07/08/2013 0

Création de la tâche Asynchrone et connexion HTTP - ListViewJson

Cette partie du projet va apprendre à mettre en place une tâche asynchrone (AsyncTask) ainsi que de récupérer des données par connexion HTTP.

Tâche Asynchrone

En développement Android, une tâche asynchrone est nécessaire pour réaliser une connexion HTTP pour éviter de bloquer l'application le temps de récupérer les données.

On veut exécuter notre tâche asynchrone depuis notre activité principal, MainActivity :

Ensuite on crée notre classe contenant la tâche asynchrone, BaskTask.java dans le package com.androiddev.listviewjson :

Par défaut, AsyncTask implémente les fonctions onPreExecute(), doInBackground(), onProgressUpdate() et onPostExecute(). Toutes ses fonctions son appelées à différents moment de l'exécution de la classe :

  1. onPreExecute : A la création de la tâche
  2. doInBackground : Contiendra notre traitement
  3. onProgressUpdate : Durant la progression de la tâche (On fait appel à cette fonctoin durant doInBackground on appelant la fonction publishProgress(Progress...)).
  4. onPostExecute : A la fin de l'exécution de la tâche

Remarque : On a dut passer le Context de l'Activity en paramètre du constructeur de BackTask pour pouvoir afficher les messages de début et de fin d'exécution.

 

Connexion HTTP

La connexion HTTP doit se réaliser dans un thread séparé du principal depuis la version 4 d'Android. Cette limitation est un bien pour l'expérience utilisateur.

Dans la tâche asynchrone on crée une fonction qui va récupérer notre fichier JSON :

Explication :

  • builder de StringBuilder va permettre de créer notre chaine de caractère de retour.
  • Ensuite on crée notre client HTTP et notre objet qui récupére les données
  • Ensuite on récupère la réponse avec notre objet HttpResponse et on récupère le status de la ressource HTTP
  • Si la ressource restourne le code 200, cela veut dire que les données sont pleinement accessible.
  • On récupère en suite le contenu qu'on va lire avec le BufferedReader et le InputStramReader.
  • On lit toute les lignes et on les donnes au StringBuilder.
  • Tout en traitant les erreurs.

La fonction de récupération de donnée sera appelé depuis la fonction doInBackground :