0Pricing
Android Academy · Lección

SharedPreferences

Conserve datos simples de clave-valor entre sesiones de la aplicación mediante SharedPreferences. Aprenda a guardar, leer y eliminar preferencias.

SharedPreferences es una lección gratuita de Android Academy en CoddyKit. Esta es la lección 4 de 6. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Android Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Android Academy incluye 6 lecciones en total.

Opciones de almacenamiento persistente

Android ofrece varias formas de almacenar datos localmente:

  • SharedPreferences — pares clave-valor sencillos (ajustes, tokens)
  • Room — base de datos SQLite estructurada (datos complejos)
  • DataStore — sustituto asíncrono moderno de SharedPreferences
  • Files — operaciones de entrada y salida de archivos sin procesar

SharedPreferences es ideal para ajustes sencillos y preferencias del usuario.

¿Qué es SharedPreferences?

SharedPreferences almacena datos como pares clave-valor en un archivo XML del dispositivo. Admite:

  • String
  • Int / Long / Float
  • Boolean
  • Set<String>

Los datos persisten al reiniciar la aplicación y sobreviven a los cambios de configuración (rotación).

Obtener una instancia de SharedPreferences

Hay dos formas de obtener un objeto SharedPreferences:

// 1. Named preferences (shared across activities)
val prefs = getSharedPreferences(
    "MyAppPrefs",    // file name
    Context.MODE_PRIVATE  // only your app can read it
)

// 2. Activity's default preferences
val prefs = getPreferences(Context.MODE_PRIVATE)

Escribir datos

Use un Editor para escribir valores y después llame a apply():

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

prefs.edit()
    .putString("username", "alice")
    .putInt("login_count", 5)
    .putBoolean("dark_mode", true)
    .apply()  // async, non-blocking — preferred over commit()

// Kotlin extension (cleaner syntax):
with(prefs.edit()) {
    putString("username", "alice")
    apply()
}

Leer datos

Lea los valores mediante la clave e indique un valor predeterminado si la clave no existe:

val prefs = getSharedPreferences("MyAppPrefs", Context.MODE_PRIVATE)

val username = prefs.getString("username", "Guest")  // default: "Guest"
val count = prefs.getInt("login_count", 0)            // default: 0
val darkMode = prefs.getBoolean("dark_mode", false)   // default: false

println("Hello, $username! Logins: $count. Dark: $darkMode")

Ejemplo práctico: selector de tema

Guarde y restaure un ajuste del modo oscuro:

class SettingsActivity : AppCompatActivity() {

    private lateinit var binding: ActivitySettingsBinding
    private lateinit var prefs: SharedPreferences

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySettingsBinding.inflate(layoutInflater)
        setContentView(binding.root)

        prefs = getSharedPreferences("settings", MODE_PRIVATE)

        // Restore saved state
        binding.switchDarkMode.isChecked = prefs.getBoolean("dark_mode", false)

        binding.switchDarkMode.setOnCheckedChangeListener { _, isChecked ->
            prefs.edit().putBoolean("dark_mode", isChecked).apply()
        }
    }
}

Guardar un token de inicio de sesión

Almacene y compruebe un token de autenticación entre reinicios de la aplicación:

// Save token after login
fun saveToken(token: String) {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .putString("token", token)
        .apply()
}

// Check if user is logged in
fun isLoggedIn(): Boolean {
    val token = getSharedPreferences("auth", MODE_PRIVATE)
        .getString("token", null)
    return token != null
}

// Clear on logout
fun logout() {
    getSharedPreferences("auth", MODE_PRIVATE)
        .edit()
        .remove("token")
        .apply()
}

Eliminar y borrar datos

Elimine claves específicas o borre todos los datos:

  • .remove("key") — elimina una entrada
  • .clear() — elimina todo el contenido del archivo

Llame siempre a .apply() (o a .commit() si necesita confirmación síncrona).

SharedPreferences frente a DataStore

SharedPreferences funciona bien, pero tiene algunas limitaciones:

  • Las lecturas síncronas pueden bloquear el hilo principal
  • No ofrece seguridad de tipos

Jetpack DataStore es el sustituto moderno: es totalmente asíncrono, funciona con Kotlin Flow y ofrece seguridad de tipos. Para proyectos nuevos, prefiera DataStore. SharedPreferences todavía se usa ampliamente y es perfectamente válido para pequeñas cantidades de datos.

Comprobación rápida

¿Qué método guarda datos en SharedPreferences de forma asíncrona sin bloquear el hilo de la interfaz de usuario?

Resumen: SharedPreferences

Ahora puede conservar datos sencillos entre ejecuciones de la aplicación:

  • Obtener con getSharedPreferences(name, MODE_PRIVATE)
  • Escribir: .edit().putString(key, value).apply()
  • Leer: .getString(key, defaultValue)
  • Eliminar: .edit().remove(key).apply()
  • Use apply() (asíncrono) en lugar de commit() (síncrono)

Siguiente curso: arquitectura de aplicaciones: ViewModel, Room y Coroutines.

Preguntas frecuentes

¿La lección «SharedPreferences» es gratis?

Sí — el texto completo de «SharedPreferences» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Android Academy, actualiza a CoddyKit PRO. El curso de Android Academy incluye 6 lecciones en total.

¿Qué aprenderé en «SharedPreferences»?

Conserve datos simples de clave-valor entre sesiones de la aplicación mediante SharedPreferences. Aprenda a guardar, leer y eliminar preferencias. Practicas Android Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Android Academy?

No se requiere experiencia previa. Android Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 6.

¿Cuánto tiempo toma la lección «SharedPreferences»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Android Academy?

Sí. Cada lección de Android Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Colecciones de Kotlin
  2. Fundamentos de RecyclerView
  3. Eventos de clic de RecyclerView
  4. SharedPreferences
  5. DataStore Preferences
  6. Adaptadores y DiffUtil
← Volver a Android Academy