Premiers pas avec le client HTTP Retrofit 2

Qu’est-ce que la modernisation?

Rénovation est un client HTTP de type sécurisé pour Android et Java. La modernisation facilite la connexion à un service Web REST en traduisant l’API en interfaces Java. Dans ce didacticiel, je vais vous montrer comment utiliser l’une des bibliothèques HTTP les plus populaires et les plus souvent recommandées disponibles pour Android.

Cette puissante bibliothèque facilite la consommation de données JSON ou XML qui sont ensuite analysées en objets Java simples (POJO). GET, POST, PUT, PATCH, et DELETE les demandes peuvent toutes être exécutées.

Comme la plupart des logiciels open source, Retrofit a été construit au-dessus de quelques autres bibliothèques et outils puissants. Dans les coulisses, Retrofit utilise OkHttp (du même développeur) pour gérer les requêtes réseau. De plus, Retrofit n’a pas de convertisseur JSON intégré pour analyser les objets JSON en objets Java. Au lieu de cela, il prend en charge les bibliothèques de convertisseur JSON suivantes pour gérer cela:

  • Gson: com.squareup.retrofit:converter-gson
  • Jackson: com.squareup.retrofit:converter-jackson
  • Moshi: com.squareup.retrofit:converter-moshi

Pour Tampons de protocole, La modernisation prend en charge:

  • Protobuf: com.squareup.retrofit2:converter-protobuf
  • Câble: com.squareup.retrofit2:converter-wire

Et pour XML, Retrofit prend en charge:

  • Cadre simple: com.squareup.retrofit2:converter-simpleframework

Alors, pourquoi utiliser la modernisation?

Développer votre propre bibliothèque HTTP de type sécurisé pour s’interfacer avec une API REST peut être un vrai problème: vous devez gérer de nombreuses fonctionnalités telles que l’établissement de connexions, la mise en cache, la nouvelle tentative de requêtes ayant échoué, le threading, l’analyse des réponses, la gestion des erreurs, etc. Retrofit, quant à lui, est très bien planifié, documenté et testé – une bibliothèque testée au combat qui vous fera gagner beaucoup de temps et de maux de tête.

Dans ce didacticiel, j’expliquerai comment utiliser Retrofit 2 pour gérer les demandes réseau en créant une application simple pour interroger les réponses récentes du Échange de pile API. Nous jouerons GET demandes en spécifiant un point de terminaison:/answers, ajouté à l’URL de base https://api.stackexchange.com/2.2/: Récupère ensuite les résultats et les affiche dans une vue recycleur. Je vais également vous montrer comment faire cela avec RxJava pour une gestion facile du flux d’état et de données.

1. Créer un projet Android Studio

Lancez Android Studio et créez un nouveau projet avec une activité vide appelée MainActivity.

Créer une nouvelle activité vide

2. Déclaration de dépendances

Après avoir créé un nouveau projet, déclarez les dépendances suivantes dans votre build.gradle. Les dépendances incluent une vue recycleur, la bibliothèque Retrofit, ainsi que la bibliothèque Gson de Google pour convertir JSON en POJO (Plain Old Java Objects) ainsi que l’intégration Gson de Retrofit.

N’oubliez pas de synchroniser le projet pour télécharger ces bibliothèques.

3. Ajout d’une autorisation Internet

Pour effectuer des opérations réseau, nous devons inclure le INTERNET autorisation dans le manifeste de l’application: AndroidManifest.xml.

4. Génération automatique de modèles

Nous allons créer nos modèles automatiquement à partir de nos données de réponse JSON en utilisant un outil très utile: jsonschema2pojo.

Obtenir les exemples de données JSON

Copier et coller https://api.stackexchange.com/2.2/answers?order=desc&sort=activity&site=stackoverflow dans la barre d’adresse de votre navigateur (ou vous pouvez utiliser Facteur si vous connaissez cet outil). Puis appuyez Entrer– cela exécutera une requête GET sur le point final donné. Ce que vous verrez en réponse est un tableau d’objets JSON. La capture d’écran ci-dessous est la réponse JSON utilisant Postman.

Réponse de l'API à la requête GET

Copiez cette réponse JSON depuis votre navigateur ou Postman.

Mapper les données JSON à Java

Maintenant visitez jsonschema2pojo et collez la réponse JSON dans la zone de saisie.

Sélectionnez un type de source JSON, style d’annotation de Gson, et décochez Autoriser des propriétés supplémentaires.

interface jsonschema2pojo

Cliquez ensuite sur le Aperçu bouton pour générer les objets Java.

sortie jsonschema2pojo

Vous vous demandez peut-être ce que @SerializedName et @Expose les annotations font dans ce code généré. Ne t’inquiète pas, je vais tout t’expliquer!

le @SerializedName une annotation est nécessaire pour que Gson mappe les clés JSON avec nos champs. Conformément à la convention de dénomination camelCase de Java pour les propriétés des membres de classe, il n’est pas recommandé d’utiliser des traits de soulignement pour séparer les mots d’une variable. @SerializedName aide à traduire entre les deux.

Dans l’exemple ci-dessus, nous disons à Gson que notre clé JSON quota_remaining doit être mappé au champ Java quotaRemaining. Si ces deux valeurs étaient identiques, c’est-à-dire si notre clé JSON était quotaRemaining tout comme le champ Java, alors il n’y aurait pas besoin de @SerializedName annotation sur le champ car Gson les mapperait automatiquement.

le @Expose L’annotation indique que ce membre doit être exposé pour la sérialisation ou la désérialisation JSON.

Importer des modèles de données dans Android Studio

Revenons maintenant à Android Studio. Créez un nouveau sous-package dans le package principal et nommez-le Les données. Dans le package de données nouvellement créé, créez un autre package et nommez-le modèle. Dans le package de modèle, créez une nouvelle classe Java et nommez-la Owner. Maintenant, copiez le Owner classe qui a été générée par jsonschema2pojo et collez-la dans le Owner classe que vous avez créée.

Faites la même chose pour un nouveau Item class, copié de jsonschema2pojo.

Enfin, créez une classe nommée SOAnswersResponse pour les réponses StackOverflow renvoyées. Vous trouverez le code de cette classe dans jsonschema2pojo comme Example. Assurez-vous de mettre à jour le nom de la classe en SOAnswersResponse partout où cela se produit.

5. Création de l’instance de modernisation

Pour émettre des requêtes réseau à une API REST avec Retrofit, nous devons créer une instance à l’aide de la Retrofit.Builder class et configurez-le avec une URL de base.

En relation :  Divertissez les enfants ennuyés avec l'onglet Kids de Google Play

Créez un nouveau package de sous-package dans le data package et nommez-le remote. Maintenant à l’intérieur remote, créez une classe Java et nommez-la RetrofitClient. Cette classe créera un singleton de Retrofit. Retrofit a besoin d’une URL de base pour créer son instance, nous passerons donc une URL lors de l’appel RetrofitClient.getClient(String baseUrl). Cette URL sera ensuite utilisée pour construire l’instance à la ligne 13. Nous spécifions également le convertisseur JSON dont nous avons besoin (Gson) à la ligne 14.

6. Création de l’interface API

Dans le package distant, créez une interface et appelez-la SOService. Cette interface contient des méthodes que nous allons utiliser pour exécuter des requêtes HTTP telles que GET, POST, PUT, PATCH, et DELETE. Pour ce tutoriel, nous allons exécuter un GET demande.

le @GET l’annotation définit explicitement que GET request qui sera exécutée une fois que la méthode sera appelée. Chaque méthode de cette interface doit avoir une annotation HTTP qui fournit la méthode de requête et l’URL relative. Il existe cinq annotations intégrées disponibles: @GET, @POST, @PUT, @DELETE, et @HEAD.

Dans la deuxième définition de méthode, nous avons ajouté un paramètre de requête pour nous permettre de filtrer les données du serveur. Retrofit a le @Query("key") annotation à utiliser au lieu de la coder en dur dans le point de terminaison. La valeur de clé représente le nom du paramètre dans l’URL. Il sera ajouté à l’URL par Retrofit. Par exemple, si nous transmettons la valeur "android" comme argument de la getAnswers(String tags) méthode, l’URL complète sera:

Les paramètres des méthodes d’interface peuvent avoir les annotations suivantes:

@Path substitution de variable pour le point de terminaison de l’API
@Query spécifie le nom de la clé de requête avec la valeur du paramètre annoté
@Body charge utile pour l’appel POST
@Header spécifie l’en-tête avec la valeur du paramètre annoté

sept. Création des utils API

Nous allons maintenant créer une classe utilitaire. Nous le nommerons ApiUtils. Cette classe aura l’URL de base comme variable statique et fournira également le SOService interface à notre application via le getSOService() méthode statique.

8. Afficher à un RecyclerView

Étant donné que les résultats seront affichés dans une vue recycleur, nous avons besoin d’un adaptateur. L’extrait de code suivant montre le AnswersAdapter classe.

9. Exécution de la demande

À l’intérieur de onCreate() méthode de la MainActivity, nous initialisons une instance du SOService interface (ligne 9), la vue du recycleur, ainsi que l’adaptateur. Enfin, nous appelons le loadAnswers() méthode.

le loadAnswers() méthode fait une requête réseau en appelant enqueue(). Lorsque la réponse revient, Retrofit nous aide à analyser la réponse JSON à une liste d’objets Java. (Ceci est rendu possible en utilisant GsonConverter.)

10. Compréhension enqueue()

enqueue() envoie la demande de manière asynchrone et notifie votre application avec un rappel lorsqu’une réponse revient. Étant donné que cette demande est asynchrone, Retrofit la gère sur un thread d’arrière-plan afin que le thread d’interface utilisateur principal ne soit pas bloqué ou interféré.

En relation :  Google Pixel 5 est disponible aux États-Unis dès maintenant

Utiliser enqueue(), vous devez implémenter deux méthodes de rappel:

  • onResponse()
  • onFailure()

Une seule de ces méthodes sera appelée en réponse à une demande donnée.

  • onResponse(): invoqué pour une réponse HTTP reçue. Cette méthode est appelée pour une réponse qui peut être correctement gérée même si le serveur renvoie un message d’erreur. Donc, si vous obtenez un code d’état 404 ou 500, cette méthode sera toujours appelée. Pour obtenir le code d’état afin que vous puissiez gérer les situations en fonction de celles-ci, vous pouvez utiliser la méthode response.code(). Vous pouvez également utiliser le isSuccessful() pour savoir si le code d’état est compris entre 200 et 300, indiquant le succès.
  • onFailure(): invoqué lorsqu’une exception de réseau s’est produite lors de la communication avec le serveur ou lorsqu’une exception inattendue s’est produite lors du traitement de la demande ou du traitement de la réponse.

Pour effectuer une requête synchrone, vous pouvez utiliser le execute() méthode. Sachez que les méthodes synchrones sur le thread principal / UI bloqueront toute action de l’utilisateur. N’exécutez donc pas de méthodes synchrones sur le thread principal / UI d’Android! Au lieu de cela, exécutez-les sur un thread d’arrière-plan.

11. Tester l’application

Vous pouvez maintenant exécuter l’application.

Exemples de résultats de StackOverflow

12. Intégration RxJava

Si vous êtes un fan de RxJava, vous pouvez facilement implémenter Retrofit avec RxJava. Dans Retrofit 1, il a été intégré par défaut, mais dans Retrofit 2, vous devez inclure des dépendances supplémentaires. Retrofit est livré avec un adaptateur par défaut pour l’exécution Call les instances. Vous pouvez donc modifier le mécanisme d’exécution de Retrofit pour inclure RxJava en incluant le RxJava CallAdapter.

Étape 1

Ajoutez les dépendances.

Étape 2

Ajouter le nouveau CallAdapter RxJavaCallAdapterFactory.create() lors de la création d’une instance Retrofit.

Étape 3

Maintenant, mettez à jour le getAnswers() méthodes de retour Observables:

Étape 4

Lors des demandes, notre abonné anonyme répond au flux de l’observable qui émet des événements, dans notre cas SOAnswersResponse. le onNext est alors appelée lorsque notre abonné reçoit un événement émis qui est ensuite passé à notre adaptateur.

Consultez Getting Started With ReactiveX sur Android par Ashraff Hathibelagal pour en savoir plus sur RxJava et RxAndroid.

Conclusion

Dans ce didacticiel, vous avez découvert Retrofit: pourquoi vous devriez l’utiliser et comment. J’ai également expliqué comment ajouter l’intégration de RxJava avec Retrofit. Dans mon prochain article, je vais vous montrer comment jouer POST, PUT, et DELETE, comment envoyer Form-Urlencoded données et comment annuler les demandes.

Pour en savoir plus sur Retrofit, reportez-vous au documentation officielle. Et en attendant, consultez certains de nos autres cours et tutoriels sur le développement d’applications Android.

  • Communication dans une application Android avec EventBus

  • Concurrence pratique sur Android avec HaMeR

  • Android From Scratch: utilisation des API REST

  • Commencez avec un modèle d’application Android en 60 secondes

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.