Aller au contenu principal

HTTP 3 - liste d'objets

astuce

ATTENTION : L'outil principal de débogage pour les appels réseaux est le network inspector dans Android Studio.

  1. Cliquer sur Fichier / File ou le symbole ☰ en haut à gauche
  2. Choisir View / Tool Windows / AppInspection
  3. Dans la fenêtre AppInspection, choisir l'onglet Network Inspector
  4. Tu devrais voir apparaître les appels réseaux de ton application

Regarder la recette de base pour les étapes:

  • AndroidManifest.xml
  • build.gradle.kts

Dans cette recette, nous allons voir comment récupérer une liste d'objets complexes depuis un service web.

Le code de cette recette est disponible ici.

Repo.kt​

Dans le package api, nous allons créer des classes pour facilement accéder aux données.

Si on récupères du JSON, on va avoir les correspondances suivantes:

  • si le JSON commence avec { on veut récupérer un objet et on aura besoin d'une classe. On aura un Call<Pipo> et il faudra définir une classe Pipo
  • si le JSON commence avec [ on veut récupérer une liste et on pourra directement utiliser List. On aura alors un Call<List<Xxxxx>>.
  • si le JSON commence par " on va avoir un Call<String>
  • si le JSON commence par une suite de chiffes on va avoir un Call<Long>
  • etc.

Exemple​

https://api.github.com/users/octocat/repos

  • on voit que le JSON classe avec [ donc on veut récupérer une liste d'objets.
  • on va donc récupérer une liste de Repo et on crée la classe Repo.
  • pour voir quels champs mettre dedans, on regarde le premier élément de la liste avec le premier {
  • pour la demo, on a ajouté le name et le id
Chargement...

GitHubApi.kt​

Au niveau du service, nous allons modifier les signatures des méthodes:

  • un accès récupère une liste d'objets complexes
Chargement...

RetrofitInstance.kt​

Nous allons modifier notre Retrofit pour utiliser une librairie:

  • Gson est une librairie codée par Google
  • Gson gère la traduction entre un objet Kotlin et un objet JSON dans les 2 sens
  • on indique à Retrofit de s'en servir en ajoutant GsonConverterFactory.create()
Chargement...

Appel depuis l'interface graphique​

Dans l'interface graphique avec Compose:

  1. on va toujours avoir un appel à enqueue
  2. le Callback est adapté au nouveau type ici List<Repo>
  3. ici on envoie la liste à une variable d'état pour affichage dans une LazyColumn
Chargement...

Pour afficher la liste, on utilise une LazyColumn avec des Cards:

Chargement...

Appel dans les tests​

On montre ici comment appeler la méthode depuis des tests automatiques

Chargement...