lunes, 22 de noviembre de 2021

Android: Jetpack Compose | Room | Retrofit | MVVM | Hilt -|Pruebas unitarias | REST API | SQLite

Hola ¿cómo están?, esta entrada es la introducción de un videotutorial donde el objetivo es crear una aplicación para demostrar cómo llamar una REST API y guardar la respuesta en SQLite usando la librería de Room. También vamos a crear la interfaz de usuario con Jetpack Compose. Algunas de las cosas que vamos aprender son:

  • SQLite y Room
  • Jetpack Compose
  • Patrón MVVM
  • Inyección de dependencias con Hilt
  • Pruebas unitarias

Antes de comenzar pueden descargar el código fuente de este proyecto en GitHub.

Videotutorial


Arquitectura

Para esta aplicación vamos a basarnos en la arquitectura recomenadada en la pagina de android

Dependencias

Algunas de las dependencias utilizadas en este proyecto son:

Coil: Sirve para cargar imágenes y tiene soporte de Jetpack Compose. Es un reemplazo de Glide o Picasso.
Retrofit: Esta librería nos va ayudar a hacer peticiones a la Rest Api de una manera sencilla.
Hilt: Es un framework para inyección de dependencias, en nuestro caso ayudará a hacer nuestro código más fácil de testear.

También agregamos algunas dependencias que nos van ayudar con las pruebas unitarias, pero una en especial es:

MockWebServer : Esta libreria nos va ayudar a hacer pruebas unitarias al codigo que generemos para hacer peticiones a la Rest Api.

Conclusión

Esta es mi segunda aplicación con Jetpack Compose y veo que tienen un gran potencial. Creo que poco a poco va ir reemplazando los XML que usamos actualmente para el desarrollo de Android.

Recuerda el videotutorial completo lo puedes ver en youtube:

    

2 comentarios:

  1. Hola Amigo, quiero hacer algo parecido al ejemplo que desarrollas, y estoy primero haciendo contigo este ejemplo. en el momento de probar la app, en el minuto 35 del video, me da este error y no se me ejecuta, si me pudieras dar una idea te lo agradecería, soy nuevo en desarrollo de android, gracias de antemano...

    [Dagger/MissingBinding] com.chen2dev.withrest.repository.UserRepository cannot be provided without an @Provides-annotated method.
    com.chen2dev.withrest.repository.UserRepository is injected at
    com.chen2dev.withrest.UserViewModel(userRepositoryImp)
    com.chen2dev.withrest.UserViewModel is injected at
    com.chen2dev.withrest.UserViewModel_HiltModules.BindsModule.binds(vm)
    @dagger.hilt.android.internal.lifecycle.HiltViewModelMap java.util.Map> is requested at
    dagger.hilt.android.internal.lifecycle.HiltViewModelFactory.ViewModelFactoriesEntryPoint.getHiltViewModelMap() [com.chen2dev.withrest.MyApplication_HiltComponents.SingletonC ? com.chen2dev.withrest.MyApplication_HiltComponents.ActivityRetainedC ? com.chen2dev.withrest.MyApplication_HiltComponents.ViewModelC]

    ResponderBorrar
    Respuestas
    1. Descarga el codigo fuente de Github y compara que las clases sean iguales. Creo que te esta faltando agregar una etiqueta cuando haces inyeccion de dependencias

      Borrar

Entradas populares