HTTP 3 - liste d'objets
ATTENTION : L'outil principal de débogage pour les appels réseaux est le network inspector dans Android Studio.
- Cliquer sur Fichier / File ou le symbole ☰ en haut à gauche
- Choisir View / Tool Windows / AppInspection
- Dans la fenêtre AppInspection, choisir l'onglet Network Inspector
- Tu devrais voir apparaître les appels réseaux de ton application
Regarder la recette de base pour les étapes:
Dans cette recette, nous allons voir comment :
- Récupérer une liste d'objets complexes depuis un service web.
- TODO
Le code de cette recette est disponible ici.
- Repo.kt
- GitHubApi.kt
- RetrofitInstance.kt
- Appel depuis l'interface graphique
- Appel dans les tests
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
Au niveau du service, nous allons modifier les signatures des méthodes:
- un accès récupère une liste d'objets complexes
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()
Dans l'interface graphique avec Compose:
- on va toujours avoir un appel à enqueue
- le Callback est adapté au nouveau type ici List<Repo>
- ici on envoie la liste à une variable d'état pour affichage dans une LazyColumn
Pour afficher la liste, on utilise une LazyColumn avec des Cards:
On montre ici comment appeler la méthode depuis des tests automatiques