Guardar Preferencias en Android [Kotlin]

Recientemente se me presentó la necesidad de desarrollar una aplicación Android (cosa que no había hecho nunca, aunque algo había visto en videos y tutoriales).

Esta aplicación requería (entre algunas otras) la típica funcionalidad de “Recordar contraseña”, y viendo en internet me topé con que para esto podía utilizar instancias de las clases SharedPreferences.Editor y SharedPreferences para guardar y recuperar datos respectivamente.

Y aunque es fácil de usar, la verdad es que repetía bastante código al momento de guardar las preferencias, además, en varias ocasiones se me olvidó llamar a la función apply() para guardar los cambios (como era de esperarse con alguien que no había hecho nada para Android).

// Ejemplo para guardar preferencias
var editor =
     getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
editor.putString("MiDato1", "Valor1")
editor.putString("MiDato2", "Valor2")
editor.apply()
// Ejemplopara leer preferencias
val prefs =
     getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE)
 
var correo = prefs.getString("MiDato1", "ValorPorDefect")

Entonces, después de varias ocasiones en las que se me olvidó llamar a la función apply() y que no entendía porque siempre las preferencias me retornaban null, decidí hacer una Clase que me ayudara con la tarea de guardar y leer las preferencias, desde luego que lo que conseguí no es ni lo más eficiente ni lo más elegante, pero me funciona y creo que para alguien que antes no había hecho aplicaciones Android y mucho menos algo en Kotlin esta “decente”.

Para esto creé la clase AppPreferences que contiene un enumerado donde se pueden ir agregando las claves(keys) de los campos que vamos a guardar en las preferencias, esto nos ayuda a tener un mejor control sobre ellos y sobre todo a evitar errores al momento de escribirlas claves al guardar o leer las preferencias.

// Ejemplo del enumerado
class AppPreferences {
    enum class Preferences(var value: String) {
        MI_DATO_1("MI_DATO_1"),
        MI_DATO_2("MI_DATO_2")
    }
}

También dentro de AppPreferences declaré las clases Reader y Writer que fungen como wrapers para instancias de SharedPreferences y SharedPreferences.Editor respectivamente. Para la clase Reader solo hice funciones que simplemente retornan los valores de las preferencias, pero para la clase Writer hice funciones que guardan el dato que deseo almacenar y a su vez llaman a la función apply().

Guardé esta clase en Github por si a alguien más le pudiera servir y/o es gustoso de contribuir a mejorarla, sin más les dejo el código de la clase.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.