On pourrait simplement faire une requĂȘte rĂ©seau, transformer le JSON en un objet anonyme assez basique comme une Map<String, Any>, et afficher les donnĂ©es.
Sauf quâon ne va pas faire ça, câest vraiment le pire choix de dĂ©veloppement possible.
| Aspect | Pourquoi câest nul |
|---|---|
| Type-safety | ⹠Runtime errors fréquents ⹠Aucune vérification à la compilation ⹠Casts manuels risqués |
| Maintenance | ⹠Structure des données non explicite ⹠Documentation API manquante ⹠Modifications de clés JSON difficiles à tracer |
| Performance | âą Overhead mĂ©moire (structures dynamiques) âą Casts rĂ©pĂ©titifs Ă lâexĂ©cution âą Pas dâoptimisation par le compilateur |
| ProductivitĂ© | âą Absence dâauto-complĂ©tion IDE âą Debuggage complexe âą Tests unitaires difficiles |
| ĂvolutivitĂ© | âą Changements dâAPI complexes Ă gĂ©rer âą Versioning difficile âą Migration de donnĂ©es laborieuse |
A lâinverse, comment faire pour que ce soit bien ? Et bien, on va utiliser une architecture avancĂ©e pour nous permettre dâĂȘtre le plus type-safe et productif possible.

| Aspect | Pourquoi câest bien |
|---|---|
| Type-safety | ⹠Vérification à la compilation ⹠Détection précoce des erreurs ⹠Auto-complétion IDE complÚte |
| Maintenance | ⹠Contrat API explicite (data classes) ⹠Documentation automatique ⹠Modifications traçables |
| Performance | âą GĂ©nĂ©ration de code Ă la compilation âą Absence de reflection Ă lâexĂ©cution âą Optimisations compilateur |
| ProductivitĂ© | âą Mapping JSON â Kotlin automatique âą Debuggage simplifiĂ© âą Tests unitaires faciles |
| ĂvolutivitĂ© | âą Gestion des versions API âą Migration contrĂŽlĂ©e âą Adapters personnalisables |
| Fonctionnalités | ⹠Gestion native des nullables ⹠Validations personnalisées ⹠Transformations de données |
Pour faire des requĂȘtes rĂ©seaux il y a plĂ©htore de librairies disponibles. Contrairement Ă iOS, sur Android il nây a pas de librairie officielle pour faire des requĂȘtes rĂ©seaux.
Aussi OkHTTP est une des librairies les plus utilisĂ©es pour faire des requĂȘtes rĂ©seaux. OkHTTP est dĂ©veloppĂ© par Square, et est utilisĂ© par de nombreuses applications Android.
Square développe également
RetrofitetMoshiaussi connus pour leur simplicitĂ© dâutilisation et leur inter-compatibilitĂ©.

Ici on va installer les éléments pour que cette architecture fonctionne.
Lisez la documentation de Retrofit pour savoir comment lâinstaller.
Gradle Attention Ă utiliser Gradle correctement avec
libs.versions.toml
đ Garder votre calme

Alternatives
Il existe dâautres librairies comme Gson, Jackson, ou Kotlinx, mais jâaime bien Moshi. Vous ĂȘtes libre de choisir celle que vous prĂ©fĂ©rez.
JsonAdapter pour chaque type de données que vous souhaitez convertir.JsonAdapter sont des classes qui permettent de convertir les données JSON en objets Kotlin, et vice-versa.Ne réinventez pas la roue
Il existe aussi des JsonAdapter pour les types particuliers comme les dates, quand elles ont un format standard (ISO, Rfc etc.)
Moshi est une librairie qui permet de convertir des données JSON en objets Kotlin, et vice-versa. Pour simplifier la conversion des données, nous allons utiliser le KSP pour générer automatiquement les JsonAdapter pour chaque type de données que nous souhaitons convertir.
Dans cette partie vous allez sĂ»rement maudire le dĂ©veloppement Android / Java / Kotlin, car il y a beaucoup de configurations Ă faire pour que tout fonctionne correctement. Mais une fois que tout est en place, vous verrez que câest trĂšs pratique, et surtout, on sâapproche de ce que vous allez vivre en entreprise.
Lisez la documentation de Moshi pour savoir comment lâinstaller : https://github.com/square/moshi
Nous allons ajouter les dépendances nécessaires pour Moshi et KSP (Kotlin Symbol Processing) :
Subtilité
KSP est un plugin de compilation, il faut donc lâajouter dans le fichier build.gradle.kts de votre module, dans la section plugins.
Ensuite il faut ajouter un processor KSP pour Moshi, qui va générer les adapters pour nous.
com.squareup.moshi:moshi-kotlin-codegen:1.15.1, le plugin Ă Ă©tĂ© rajoutĂ© Ă lâĂ©tape dâavant.A penser !
Nâoubliez pas que les versions des dĂ©pendances dans les documentations sont souvent obsolĂštes ou sont des exemples, câest Ă vous de mettre Ă jour les versions.
Maintenant que tout est installé correctement, on va enfin pouvoir coder !
Faites cela dans un fichier DwitchApiService.kt par exemple qui va ressembler à ça :
interface DwitchService {
// Vos requĂȘtes ici
}
val moshi = Moshi.Builder()
//... Ajoutez vos adapters ici (notamment pour les dates)
.build()
var retrofit = Retrofit.Builder()
//... Les paramĂštres Retrofit ici (notamment un petit lien avec moshi)
.build()
// Puis créez votre service
var dwitchService = retrofit.create(DwitchService::class.java)
Ressources
Permissions
Nâoubliez pas de rajouter les permissions nĂ©cessaires dans le fichier AndroidManifest.xml pour accĂ©der Ă internet.
Pour faire des appels réseaux, on va utiliser des Coroutines pour rendre les appels asynchrones.
viewModelviewModelScope.launch {
try {
val response = dwitchService.getOrders()
// Faites quelque chose avec la réponse
} catch (e: Exception) {
// Gérez les erreurs
}
}
SideEffectval rememberCoroutineScope = rememberCoroutineScope()
SideEffect {
rememberCoroutineScope.launch {
try {
val response = dwitchService.getOrders()
// Faites quelque chose avec la réponse
} catch (e: Exception) {
// Gérez les erreurs
}
}
}
LaunchedEffectval rememberCoroutineScope = rememberCoroutineScope()
LaunchedEffect(true) {
try {
val response = dwitchService.getOrders()
// Faites quelque chose avec la réponse
} catch (e: Exception) {
// Gérez les erreurs
}
}