Capitulo 7 del Módulo 3 Conexion API y Cargar datos

➜ Cargar Categorias

Cómo obtener y almacenar categorías desde una API en Kotlin con Retrofit | Aprende a usar Retrofit en Kotlin para realizar llamadas asíncronas a una API y almacenar datos en una base de datos local. Este ejemplo muestra cómo obtener una lista de categorías y gestionar las respuestas exitosas y fallidas de manera eficiente.

El método se encarga de obtener una lista de categorías desde una API y luego almacenar esas categorías en una base de datos local. A continuación, te lo explico paso a paso:

Descripción del método getListCategories():

  1. Llamada a la API (getListCategories().enqueue):

    • Este método realiza una llamada asíncrona a la API usando Retrofit. La llamada se realiza a través de enqueue, lo que significa que no bloqueará el hilo principal de la aplicación.
    • El tipo esperado de respuesta es una lista de objetos Category (ArrayList<Category>).
  2. Callback onResponse:

    • Validación de la respuesta exitosa (response.isSuccessful):
      • Si la respuesta de la API es exitosa (por ejemplo, un código de estado HTTP 200), se continúa con el procesamiento.
    • Iteración sobre el cuerpo de la respuesta (response.body()):
      • El cuerpo de la respuesta contiene una lista de categorías, que se itera utilizando un bucle for.
    • Inserción en la base de datos:
      • Por cada categoría en la respuesta, se inserta en la base de datos local usando el método db.insertCategory.
      • Se crea un objeto Category con los atributos id y name antes de almacenarlo.
    • Impresión de las categorías:
      • Por cada categoría, se imprime su nombre en la consola para registro.
  3. Callback onFailure:

    • Si ocurre un error en la llamada a la API (fallo en la red, problemas con el servidor, etc.), se ejecuta el método onFailure.
    • Se utiliza t.printStackTrace() para imprimir la traza del error, lo que puede ser útil para depurar el problema.

Código:

kotlin
apiInterface.getListCategories().enqueue(object : Callback<ArrayList<Category>> {
    override fun onResponse(
        call: Call<ArrayList<Category>>,
        response: Response<ArrayList<Category>>
    ) {
        if (response.isSuccessful) {
            // Procesa la respuesta exitosa
            response.body()?.let { categoryList ->
                for (item in categoryList) {
                    db.insertCategory(
                        Category(
                            item.id,
                            item.name
                        )
                    )
                    println("categoria: " + item.name)
                }
            }
        }
    }

    override fun onFailure(call: Call<ArrayList<Category>>, t: Throwable) {
        // Manejo de errores
        t.printStackTrace()
    }
})

Flujo del método:

  1. Se realiza una llamada asíncrona a la API para obtener una lista de categorías.
  2. Si la llamada es exitosa, las categorías se insertan en la base de datos local.
  3. Si hay un fallo en la llamada, el error se registra en la consola.

Este patrón es común en aplicaciones que consumen APIs para mantener una copia local de los datos obtenidos del servidor, lo que mejora la capacidad de respuesta de la aplicación y permite el uso offline.


495 visitas

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú