En este artículo, vamos a explorar cómo crear una aplicación CRUD (Crear, Leer, Actualizar, Eliminar) en Android usando Kotlin y SQLite. La aplicación gestionará información sobre trabajadores, permitiendo al usuario agregar, consultar, actualizar y eliminar registros en una base de datos local.
Estructura del Proyecto
La aplicación consta de las siguientes partes principales:
- Actividad Principal (
MainActivity): Pantalla de inicio que proporciona botones para navegar a las actividades de agregar y eliminar trabajadores. - Base de Datos (
BaseDeDatos): Clase que maneja las operaciones CRUD en SQLite. - Clases de Actividad (
CrearTrabajador,BorrarTrabajador): Cada una representa una pantalla donde el usuario puede realizar operaciones CRUD específicas. - Diseño XML (
activity_main.xml): Archivo XML que define la interfaz de usuario de la actividad principal.
1. Actividad Principal (MainActivity)
La clase MainActivity es el punto de entrada de la aplicación. Aquí se definen los botones para cada operación CRUD y se les asignan acciones que abren las actividades correspondientes.
package com.example.crud
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
// Botón para abrir la actividad de creación de trabajadores
val crear: Button = findViewById(R.id.buttonagregar)
crear.setOnClickListener {
val intent = Intent(this, CrearTrabajador::class.java)
startActivity(intent)
}
// Botón para abrir la actividad de eliminación de trabajadores
val borrar: Button = findViewById(R.id.buttoneliminar)
borrar.setOnClickListener {
val intent = Intent(this, BorrarTrabajador::class.java)
startActivity(intent)
}
}
}
En este código:
enableEdgeToEdge()habilita el diseño de borde a borde en Android.- Los botones “Agregar” y “Eliminar” se configuran con
setOnClickListenerpara abrir las actividadesCrearTrabajadoryBorrarTrabajador, respectivamente.
2. Base de Datos (BaseDeDatos)
La clase BaseDeDatos extiende SQLiteOpenHelper y se encarga de las operaciones CRUD.
package com.example.crud
import android.content.ContentValues
import android.content.Context
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
data class Trabajador(val id: Int = 0, val name: String, val apellido: String, val cargo: String, val salario: Double, val activo: Boolean)
class BaseDeDatos(context: Context) : SQLiteOpenHelper(context, "biblioteca.db", null, 1) {
override fun onCreate(db: SQLiteDatabase?) {
val crearTabla = """
CREATE TABLE Trabajadores(
id INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT,
apellido TEXT,
cargo TEXT,
salario REAL,
activo BOOLEAN
)
"""
db?.execSQL(crearTabla)
}
override fun onUpgrade(db: SQLiteDatabase?, oldVersion: Int, newVersion: Int) {
db?.execSQL("DROP TABLE IF EXISTS Trabajadores")
onCreate(db)
}
fun insertarTrabajador(trabajador: Trabajador): Boolean {
val db = this.writableDatabase
val values = ContentValues()
values.put("nombre", trabajador.name)
values.put("apellido", trabajador.apellido)
values.put("cargo", trabajador.cargo)
values.put("salario", trabajador.salario)
values.put("activo", trabajador.activo)
val result = db.insert("Trabajadores", null, values)
db.close()
return result != -1L
}
// Funciones para consultar, actualizar y eliminar trabajadores omitidas para brevedad...
}
En BaseDeDatos:
onCreate()crea la tablaTrabajadorescon columnas para ID, nombre, apellido, cargo, salario y si está activo.insertarTrabajador()inserta un nuevo registro en la base de datos. Retornatruesi la inserción fue exitosa.
3. Clase BorrarTrabajador
La clase BorrarTrabajador es una actividad que permite al usuario eliminar un trabajador de la base de datos.
package com.example.crud
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
class BorrarTrabajador : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_borrar_trabajador)
val editConsultar: EditText = findViewById(R.id.editConsultar)
val buttonBorrar: Button = findViewById(R.id.buttonconsultar)
buttonBorrar.setOnClickListener {
val valor = editConsultar.text.toString().toIntOrNull()
if (valor != null) {
val dbHelper = BaseDeDatos(this)
val resultado = dbHelper.eliminarTrabajador(valor)
if (resultado) {
Toast.makeText(this, "Trabajador eliminado correctamente", Toast.LENGTH_SHORT).show()
finish()
} else {
Toast.makeText(this, "Error al borrar trabajador", Toast.LENGTH_SHORT).show()
}
} else {
Toast.makeText(this, "Ingrese un ID válido", Toast.LENGTH_SHORT).show()
}
}
}
}
Aquí:
buttonBorrartiene unsetOnClickListenerque obtiene el ID del trabajador desdeeditConsultar.- Llama a
eliminarTrabajador(id)deBaseDeDatosy muestra un mensaje de confirmación o error conToast.
4. Diseño de Interfaz (activity_main.xml)
En el archivo XML de la actividad principal, se definen los botones que permiten al usuario navegar entre las actividades de CRUD.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/buttonagregar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Agregar"
app:layout_constraintBottom_toTopOf="@+id/buttoneliminar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttonconsultar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Consultar"
app:layout_constraintBottom_toTopOf="@+id/buttonagregar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttonactualizar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Actualizar"
app:layout_constraintBottom_toTopOf="@+id/buttonconsultar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttoneliminar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Eliminar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Este archivo define cuatro botones alineados verticalmente para realizar cada operación CRUD.
Conclusión
En este artículo hemos creado una aplicación CRUD básica en Android con Kotlin, utilizando SQLite como base de datos. La aplicación permite agregar, consultar, actualizar y eliminar información de trabajadores de manera sencilla.
¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.
¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos.

NUESTRAS ÚLTIMAS PUBLICACIONES
- Propuestas de actividades avanzadas con XML, DTD, XPath y XSLT
- Apuntes extensos de XML y XSLT
- El momento IDEAL para impulsar tu FORMACIÓN y alcanzar tus Metas Académicas: LAS NAVIDADES.

- 20 ejercicios de funciones avanzadas en Python (al estilo de Ackermann)
- Cómo guardar una página web completa en MySQL con PHP (urlencode, BLOB y otras técnicas)
- 60 ejercicios de funciones recursivas en Python para la carrera de Informática
- SIMULACRO 2 – FP Programación de Videojuegos
- Simulacro de examen – FP Programación de Videojuegos
- ALERTA METEOROLÓGICA

ELIGE TU RED FAVORITA Y SÍGUENOS.
AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.
Contenido restringido





































































































































































































































































INFORMACIÓN SOBRE 







Comments are closed