Fin du projet ListViewJson (Bar Action, Préférence, ListView)
ListViewJson 11/08/2013 0

Fin du projet ListViewJson (Bar Action, Préférence, ListView)

Pour finir le projet ListViewJson, on va placer un bouton dans l'Action Bar, utiliser les SharedPreferences et utiliser la ListView de la ListActivity par rapport à la base de donnée SQLite.

Pour finir l'application, on va commencer par créer la fonction permettant de remplir la ListView de MainActivity.

 

SQLite vers ListView

Dans la MainActivity on va ajouter les deux fonctions nécessaires pour remplir la ListView.

MainActivity.java

recupContact :

  1. Tout d'abord on ouvre notre base de donnée.
  2. On appel la fonction getAllContacts de notre datasource
  3. On retourne la liste de Contact

refreshList :

  1. On récupère la liste  de Contact avec la fonction précédente
  2. On l'insert dans l'ArrayAdapter
  3. On attribut l'ArrayAdapter à notre ListView (sera afficher ce que retourne la fonction toString de notre classe Contact.java)

 

Action Bar

A présent, on va ajouter un bouton rafraichir dans notre application.

/res/menu/main.xml

Pour ajouter un bouton au menu, différentes configurations sont possibles :

  1. On lui attribue un ID
  2. On donne un orde d'affichage
  3. On lui donne un icône
  4. showAsAction est assez intéressant car selon le paramètre, soit on affiche l'icone à coté du bouton paramètre (représenté par les trois points veticales) soit dedans et soit selon l'espace disponible. De plus, pour les anciennes versions d'Android (<=2.3.3), le bouton s'affichera lors de l'appui sur la touche physique menu (représenté par les trois traits l'un en dessous de l'autre)
  5. Et un texte

L'icône choisit est le suivant :

icone rafraichir

 

Et maintenant on  s'occupe de l'action lors de l'appuie sur la touche rafraichir.

MainActivity.java

On modifie l'écouteur des touches de menu et à travers d'un switch, on appel la tâche asynchrone si l'appuie a été effectué sur le bon bouton.

 

SharedPreferences

On va utiliser une Préférence qui correspond à une variables que l'on stockera et qui sera conserver même à l'extinction de l'application. Cela va permettre de ne pas mettre à jour la liste à chaque démarrage, mais par exemple une fois par jour.

MainActivity.java

Pour cela on va modifier la fonction onCreate de MainActivity.

  1. On récupère la préférence nommée lastSync dans le Context et en mode privé.
  2. On récupère la valeur de la préférence (0 si n'existe pas). On enregistre dans cette préférence le timestamp (milliseconde depuis le 1er janvier 1970 à 0 h) de la dernière synchronisation.
  3. On soustraie le timestamp du moment du lancement de l'application et de la préférence. Si la différence est supérieur au nombre de milliseconde d'une journée (86400000) alors on réalise la synchronisation.
  4. Sinon on appelle la fonction qui charge les contacts depuis la base de donnée SQLite.

On modifie ainsi notre tâche asynchrone pour enregistrer la date de dernière synchronisation.

BackTask.java

On enregistre la date si l'enregistrement des contacts dans la BDD s'est bien passé.

  1. On récupère notre SharedPreferences lastSync en mode privé.
  2. On ouvre l'edition de la Préférence avec un Editor
  3. On place le timestamp de la synchronisation avec un putLong
  4. On enregistre avec un commit

On en profite aussi pour rafraichir la liste dans la fonction onPostExecute de notre tâche asynchrone.

 

Récapitulatif

Au final le fichier BackTask.java :