➜ 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
enqueue
para 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_id
se 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
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.
- 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.
488 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