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.
- 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.
- L'afficher dans un RecyclerView.
Le code de cette recette est disponible ici.
- transfer
- Service.kt
- RetrofitUtil.kt
- Appel depuis l'interface graphique
- Appel dans les tests
Dans le package transfer, 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.
Premier exemple
Si on ouvre la page https://api.github.com/users/octocat
- le JSON commence par
{
donc on va créer une classe Utilisateur - dans l'objet dans le JSON, on voit la clé "login", on ajoute dans la classe Utilisateur un champ login
- il faut que le nom soit exactement le même pour que Retrofit / Gson puisse faire la correspondance
- il est conseillé d'ajouter un champ à la fois et de tester le fonctionnement
Chargement...
Exemple 2
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...
Au niveau du service, nous allons modifier les signatures des méthodes:
- un accès récupère un objet complexe
- un accès récupère une liste d'objets complexes
Chargement...
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...
Dans l'interface graphique:
- on va toujours avoir un appel à enqueue
- le Callback est adapté au nouveau type ici List<Repo>
- ici on envoie la liste au recyclerView pour affichage
Chargement...
On montre ici comment appeler les 2 nouvelles méthodes depuis des tests automatiques
Chargement...