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:
- 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
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
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()
Appel depuis l'interface graphique
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:
Appel dans les tests
On montre ici comment appeler la méthode depuis des tests automatiques