Uso de Retrofit y Ktor Request API en aplicaciones de Android – Parte 4 | Por Thales Isidoro | Febrero de 2022
Hasta ahora hemos creado varias interfaces y sus respectivas implementaciones, pero no hemos puesto en práctica el Hilt para vincular estas interfaces y sus implementaciones… Además de los enlaces de interfaz, necesitamos crear un módulo que proporcione la biblioteca que están usando.
Cuando necesitamos proporcionar instancias de clases que no construimos, como Retrofit y Gson (ambas bibliotecas de terceros que agregamos a nuestro proyecto), es necesario crear un Propósito y toma notas módulo y anotaciones Instalar en pc En su lado.
Las anotaciones InstallIn requieren específicamente un Componentes, que enlazará directamente con el ciclo de vida de nuestra aplicación. Entonces, siguiendo un ejemplo de un módulo que proporciona instancias de Retrofit y Gson, idealmente solo existirá una instancia de ellos durante la vida útil de nuestra aplicación.
Para obtener más información sobre los componentes de Hilt, visite documento.
Para practicar, vamos a crear un archivo llamado módulo de marcoEn él, usaremos componente único y cree funciones que proporcionarán instancias de Gson, OkHttpClient y Retrofit:
FrameworkModule.kt actualmente tiene 3 funciones, cada una de las cuales debe anotarse suministro (de forma predeterminada, se proporciona cualquier instancia de clase de una biblioteca externa) y anotaciones único (para garantizar que solo se cree una instancia, generalmente se usa con SingletonComponent).
Ahora explica mejor qué hace cada función.
Proporciona GsonConverterFactory: Devuelve una instancia de GsonConverterFactory, que la biblioteca Retrofit requiere para poder convertir JSON a la clase de objeto de nuestra aplicación. Aquí no hay secretos.
Proporciona OkHttpClient: devuelve un OkHttpClient, básicamente estas son las configuraciones que podemos agregar a la solicitud.No es obligatorio usar este clienteAquí elijo agregar solo para poner pausa Solicitud de 10 segundos.
Proporcionar actualización de JsonPlaceholderApi: Lo más diferente hasta ahora es que toma un parámetro, que es el tipo que creamos anteriormente, y devuelve una instancia de la clase que contiene las funciones de solicitud de API usando Retrofit.
Al crear estas funciones, es posible que haya notado que Android Studio muestra algunos íconos junto a los números de línea. Esto se debe a que Android Studio está configurado para reconocer la inyección de dependencia proporcionada por Hilt, estos íconos nos ayudan, nos informan que la inyección de dependencia se ha realizado correctamente e incluso los íconos en los que se puede hacer clic apuntarán a todas las demás clases que usan estas implementaciones.
Observe en la imagen de arriba cómo desaparece el icono cuando se elimina la función que proporciona el tipo de función Proporcionar actualización de JsonPlaceholderApi necesita…
Si tuviéramos que mirar nuestros archivos DataSourceRemoteImplRetrofit.kt Podemos notar que dentro de su constructor, después de que solicitemos JsonPlaceholderApiRetrofit.ktEste ícono también se agrega, porque ahora le decimos a Hilt que proporcione esta configuración de funciones Proporciona JsonPlaceholderApiRetrofit para cualquier clase que necesite un tipo Actualización de JsonPlaceholderApi.
Ahora necesitamos usar el concepto de interfaces enlazadas de Hilt, que se usa cuando tenemos una interfaz creada en una aplicación y una implementación de esa interfaz.Para ello, es necesario crear una interfaz, utilizando la anotación módulo y anotaciones Instalar en pc.componente con el que queremos crear Propósito.
Más información documento Haz un mango.
En la práctica, vamos a crear un módulo de datos.kt Contendrá los enlaces para nuestra capa. datosy debe estar dentro del alcance persona soltera.
Tenga en cuenta que cada función ahora está anotada uniry como parámetro debe recibir la clase de implementación y devolver la interfaz implementada.
Si abrimos la clase de repositorio, notaremos que la interfaz DataSourceRemote se inyectó correctamente allí porque le dijimos a Hilt qué implementación proporcionará a cualquiera que solicite esa interfaz… Además, podemos verificar UseCase La interfaz RepositoryJsonPlaceholder es también se inyectó correctamente en la clase porque también notificamos su implementación.
Todavía necesitamos proporcionar una implementación de la clase UseCase.La única diferencia con el DataModule que acabamos de crear es que nuestro caso de uso se instalará en ver modelo y no tendrá un alcance único.
Módulo de caso de uso de interfaz:
Esto completa la configuración de inyección de dependencia usando Hilt en nuestro proyecto.