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

➜ Cargar Productos

Sincronización de productos con Retrofit y base de datos local en Kotlin | Descubre cómo obtener una lista de productos desde una API utilizando Retrofit en Kotlin, almacenarlos en una base de datos local y gestionar la redirección del usuario tras la sincronización. Este ejemplo incluye manejo de respuestas exitosas y fallidas.

se encarga de obtener una lista de productos desde una API, almacenarlos en una base de datos local, y después redirigir al usuario a la pantalla principal de la aplicación. Te lo explico paso a paso:

Descripción del método getListProducts():

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

    • Al igual que en el método anterior para categorías, este realiza una llamada asíncrona a la API utilizando Retrofit, esperando una respuesta con una lista de productos (ArrayList<Product>).
    • Se usa enqueue para que la operación se ejecute en segundo plano, sin bloquear el hilo principal.
  2. Callback onResponse:

    • Validación de la respuesta exitosa (response.isSuccessful):
      • Si la respuesta es exitosa (código HTTP 200), continúa el procesamiento.
    • Iteración sobre el cuerpo de la respuesta (response.body()):
      • Se itera sobre la lista de productos devueltos por la API.
    • Inserción en la base de datos:
      • Cada producto obtenido es insertado en la base de datos local utilizando el método db.insertProduct.
      • Los atributos del producto como id, name, description, price, stock, unit, image, y category_id se usan para crear un objeto Product, que luego se almacena.
    • Impresión del nombre del producto:
      • Se imprime el nombre de cada producto insertado en la consola para registro.
  3. Actualización de preferencias de usuario:

    • Una vez que todos los productos han sido almacenados correctamente, se actualiza una preferencia de usuario usando PrefsManager. Se establece un valor booleano "session" en true, indicando que se ha iniciado una sesión o proceso satisfactorio.
  4. Redirección a la pantalla principal:

    • Se utiliza un Intent para redirigir al usuario a la actividad principal de la aplicación (MainActivity).
    • Luego, se llama a finish() para cerrar la actividad actual y evitar que el usuario regrese a ella usando el botón de retroceso.
  5. Callback onFailure:

    • En caso de que falle la llamada a la API (por problemas de red, servidor, etc.), se ejecuta el método onFailure, y se imprime la traza del error (t.printStackTrace()).

Código:

kotlin
apiInterface.getListProducts().enqueue(object : Callback<ArrayList<Product>> {
    override fun onResponse(
        call: Call<ArrayList<Product>>,
        response: Response<ArrayList<Product>>
    ) {
        if (response.isSuccessful) {
            // Procesa la lista de productos
            response.body()?.let { productList ->
                for (item in productList) {
                    db.insertProduct(
                        Product(
                            item.id,
                            item.name,
                            item.description,
                            item.price,
                            item.stock,
                            item.unit,
                            item.image,
                            item.category_id
                        )
                    )
                    println("product: " + item.name)
                }
            }
            
            // Actualiza la preferencia "session"
            val prefs = PrefsManager(baseContext)
            prefs.setBoolean("session", true)

            // Redirige a la pantalla principal
            startActivity(Intent(applicationContext, MainActivity::class.java))
            finish()
        }
    }

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

Flujo del método:

  1. Llamada a la API para obtener una lista de productos.
  2. Inserción de productos en la base de datos local.
  3. Actualización de las preferencias del usuario, indicando que la sesión es válida.
  4. Redirección a la pantalla principal de la aplicación tras completar la operación.
  5. Manejo de errores en caso de fallo en la llamada.

Este método es fundamental para sincronizar los datos de productos obtenidos desde un servicio web y asegurarse de que se guarden localmente para su posterior uso dentro de la aplicación. Además, el flujo de redirección mejora la experiencia del usuario tras cargar los productos.

 


488 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ú