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.
La aplicación requería la 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 se repetía bastante código y en algunas 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 no entendía porque no se guardaban las preferencias, decidí hacer una Clase Helper para guardar y leer las preferencias. 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, para tener mejor control y sobre todo a evitar errores 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 Gist 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.