Android Fundamentos: Preferencias de la Aplicación
Spanish (Español) translation by Rodney Martinez (you can also view the original English article)
Las aplicaciones Android pueden guardar datos en las preferencias de la aplicación. En este tutorial aprenderá como guardar datos constantes de la aplicación con preferencias compartidas.
Android SDK proporciona APIs útiles para guardar y recuperar preferencias de la aplicación. Las preferencias son guardadas en grupos de pares de key/value y están disponibles en el nivel Activity o compartidas por todas las clases Activity para una aplicación dada (pero no fuera del paquete de la aplicación).
¿Qué es una Preferencia?
Las preferencias compartidas son, simplemente, conjuntos de valores de datos que son guardados continuamente. Al decir; continuamente, nos estamos refiriendo a los datos que persisten a través del ciclo de vida de los eventos de aplicación. En otras palabras, la aplicación (o dispositivo, por ende) puede ser encendido o detenido sin perder los datos. La próxima ve que el usuario inicie la aplicación, los datos aún estarán disponibles.
Una preferencia individual es simplemente una dúo de key-value con un tipo de dato específico para los valores. La clave de la preferencia es simplemente un string que únicamente identifica la preferencia y el valor, es sólo eso: el valor de esa preferencia.
Por ejemplo, su aplicación podría querer guardar el nombre de un usuario. La aplicación podría tener una sola preferencia para guardar esta información:
- El tipo de datos de la preferencia podría ser un String.
- La clave podría ser un string llamado "UserName".
- El valor sería el actual nombre de usuario string, tal como "AndroidPowerUser123" o "Bob".
Una preferencia puede ser cualquier número de diferentes tipos de datos. Los siguientes tipos de datos tienen soporte por medio de la clase SharePreferences:
- Valones Booleanos
- Valores Flotantes
- Valores Enteros
- Valores Long
- Valores String
Como funciona las Preferencias Compartidas
Android SDK incluye clases útiles para que las preferencias de la aplicación empiecen funcionando con facilidad. La funcionalidad de la preferencia se puede encontrar en la interface SharedPreferences del paquete android.content.
Una aplicación puede tener múltiples conjuntos de preferencias de la aplicación donde cada conjunto tiene un nombre. Por ejemplo, una aplicación de un juego podría tener un conjunto de preferencias para información de usuario (nombre de usuario, email, puntuación alta, etc.) y un conjunto de preferencias para una condición de juego (nivel actual, puntuación actual, etc.). Las preferencias puede ser guardadas en la Activity o en el nivel de aplicación.
Las preferencias del nivel de aplicación están disponibles en todas las actividades. Estas preferencias son recuperadas usando el método de la clase de la aplicación Context llamado getSharedPreferences(). Por ejemplo:
1 |
|
2 |
import android.content.SharedPreferences; |
3 |
… |
4 |
SharedPreferences settings = |
5 |
getSharedPreferences("MyGamePreferences", MODE_PRIVATE);
|
No hay límite para el número de conjuntos de preferencias compartidas que su aplicación puede tener. Como organiza su aplicación sus preferencias, eso depende de usted. Sin embargo, usted puede que desee declarar su conjunto de nombres de preferencias para que pueda cargar con facilidad y acceder a las preferencias desde cualquier Activity dentro de su aplicación. Por ejemplo:
1 |
|
2 |
public static final String PREFERENCE_FILENAME = "AppGamePrefs"; |
Una activity, además, puede tener preferencias private. Estas preferencias solamente están disponibles dentro de la clase específica Activity y no están compartidas con otras Activities. Una Activity, solamente puede tener un conjunto de preferencias private. El código siguiente extrae las preferencias private de Activity.
1 |
|
2 |
import android.content.SharedPreferences; |
3 |
… |
4 |
SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE); |
Configurando las Preferencias
Guardando las preferencias para su aplicación es muy sencillo. Primero, debe decidir si quiere la aplicación o Activity las preferencias Activity. Use el método apropiado para extraer el objeto apropiado SharedPreferences: use el método getPreferences() de la clase Activity para activar el nivel de preferencias o el método getSharedPreferences() de la clase Context para las preferencias del nivel de aplicación.
Una vez que tenga un objeto valido SharedPreferences, usted debe usar un SharedPreferences.Editor para añadir, modificar o borrar contenido de preferencias. Para extraer un Editor para un objeto específico SharedPreferences, use su método edit(). Haga cualquier cambio a las preferencias usando los métodos disponibles en la clase Editor. Por ejemplo, la clase SharedPreferences.Editor tiene un método auxiliar para guardar las preferencias de diferentes tipos de datos:
- Guarde valores booleanos con el método putBoolean().
- Guarde valores flotantes con el método putFloat()
- Guarde valores int con el método putInt()
- Guarde valores long con el método putLong()
- Guarde valores String con el método putString().
Dentro de Editor, usted puede quitar una preferencia específica por nombre usando el método remove() o eliminando todas las preferencias dentro del conjunto usando el método clear(). Una vez que haya terminado de editar el objeto SharedPreferences, usted puede guardar los cambios usando el método del Editor, llamado commit().
Por ejemplo, el siguiente código extrae un conjunto de preferencias de aplicación llamado "MyGamePreferences" y añade una cadena de preferencias llamado "UserName" con un valor de "Guest123" y una preferencia Boolean llamada "PaidUser" con un valor de false.
1 |
|
2 |
import android.content.SharedPreferences; |
3 |
… |
4 |
SharedPreferences gameSettings = getSharedPreferences("MyGamePreferences", MODE_PRIVATE);
|
5 |
SharedPreferences.Editor prefEditor = gameSettings.edit(); |
6 |
prefEditor.putString("UserName", "Guest123");
|
7 |
prefEditor.putBoolean("PaidUser", false);
|
8 |
prefEditor.commit(); |
Actualizando las Preferencias.
Actualizar las preferencias es tan sencillo como extraer otro SharedPreferences.Editor y hacer cambios para una preferencia dada por medio de un nombre. Por ejemplo, el siguiente código modifica la preferencia "PaidUser".
1 |
|
2 |
SharedPreferences gameSettings = getSharedPreferences("MyGamePreferences", MODE_PRIVATE);
|
3 |
SharedPreferences.Editor prefEditor = gameSettings.edit(); |
4 |
prefEditor.putBoolean("PaidUser", true);
|
5 |
prefEditor.commit(); |
Consejo: Como puede ver, esto puede ser útil para definir cada preferencia clave como variables static final de tipo string para que una preferencia dada esté siempre guardada en un forma regular y reproducible. Usted no querrá preferencias aleatoria de string flotando alrededor de su código.
Extraer Preferencias
No necesita un Editor para leer las preferencias. En vez de eso, recupere el objeto SharedPreferences y use el método apropiado para extraer un preferencia por medio de un nombre:
- Extraiga valores boolean con el método getBoolean().
- Extraiga valores flotantes con el método getFloat().
- Extraiga valores enteros con el método getInt().
- Extraiga valores long con el método getLong().
- Extraiga valores String con el método getString().
Cada uno de estos métodos tiene dos parámetros: la preferencia clave string y un valor por defecto para devolver si la preferencia es undefined.
Además, puede revisar la existencia de una preferencia por medio del nombre usando el método contains(). También, puede iterar a través de todas las preferencias para una conjunto dado usando el método getAll0) de la clase SharedPreferences.
Reaccionando a los cambios de preferencias.
Su aplicación puede listen for y react for, cambiar a preferencias compartidas mediante la implementación de un listener y registrandolo con el objeto específico SharedPreferences usando los métodos registerOnSharedPreferencesChangeListener() y unregisterOnSharedPreferenceChangeListener().
Conclusión
Las preferencias compartidas (android.content.SharedPreferences) puede ser usada con facilidad para guardar datos de la aplicación. Las preferencias de la aplicación son guardadas en dúos de key-value y puede ser muchos tipos de datos diferentes, incluyendo valores numéricos, strings y boolean. Diferentes conjuntos de preferencias pueden ser guardadas en conjuntos de preferencias nombradas. Use las preferencias compartidas para guardar simples datos de la aplicación en una forma consistente.
Sobre los Autores
Desarrolladores de Celulares; Lauren Darcey y Shane Conder son coautores de varios libros sobre el desarrollo en Android: un libro de programación a fondo titulado: Desarrollo de Aplicaciones Inalámbricas de Android y Sams Aprenda usted mismo a Desarrollar Aplicaciones para Android en 24 horas. Cuando no escriben, ellos pasan su tiempo desarrollando programas para celulares en sus empresas y proporcionando servicios de consultoría. Ellos pueden ser localizado a través de correo electrónico: androidwirelessdev+mt@gmail.com o por medio de su blog en androidbook.blogspot.com y en Twitter @androidwireless.






