➜ 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():
- 
	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 enqueuepara que la operación se ejecute en segundo plano, sin bloquear el hilo principal.
 
- 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 (
- 
	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, ycategory_idse usan para crear un objetoProduct, que luego se almacena.
 
- Cada producto obtenido es insertado en la base de datos local utilizando el método 
- Impresión del nombre del producto:
		- Se imprime el nombre de cada producto insertado en la consola para registro.
 
 
- Validación de la respuesta exitosa (
- 
	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"entrue, indicando que se ha iniciado una sesión o proceso satisfactorio.
 
- Una vez que todos los productos han sido almacenados correctamente, se actualiza una preferencia de usuario usando 
- 
	Redirección a la pantalla principal: - Se utiliza un Intentpara 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.
 
- Se utiliza un 
- 
	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()).
 
- En caso de que falle la llamada a la API (por problemas de red, servidor, etc.), se ejecuta el método 
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:
- Llamada a la API para obtener una lista de productos.
- Inserción de productos en la base de datos local.
- Actualización de las preferencias del usuario, indicando que la sesión es válida.
- Redirección a la pantalla principal de la aplicación tras completar la operación.
- 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.
807 visitas
Capítulo 9 – Preferencias- Cargar datos a un DB SQLite »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar