:::: MENU ::::

Datos de usuario, preferencias o parámetros de configuración en Android

4.00 avg. rating (73% score) - 1 vote

Al desarrollar una aplicación en Android seguro que nos surge la necesidad de guardar en memoria no volatil algunos datos de configuración o preferencias de usuario, de forma que puedan leerse en la siguiente ejecución de la aplicación; ajustes como la activación del sonido, nombre de usuario y contraseña de un servicio online al que se conecta la aplicación, o la última pantalla en la que nos quedamos en un juego.

Todos estos datos se pueden guardar y recuperar muy fácilmente mediante la clase SharedPreferences.

Nota: esta clase no es apta para más de unos pocos datos. Si lo que necesitamos es guardar, por ejemplo, una serie de posiciones obtenidas del GPS, una lista de ciudades o países, o cualquier otra lista que vaya más allá de 10 o 15 elementos, lo más adecuado será utilizar una base de datos SQLite en nuestra aplicación.

Siguiendo con las preferencias de la aplicación, hay dos opciones de guardado:

  • Datos privados de una Activity.
  • Datos compartidos por todas las Actividades de la aplicación.

 

Datos privados de una Activity Android

Para la lectura de parámetros, usaremos:

// Obtenemos la instancia de las preferencias de la Activity
SharedPreferences settings = getPreferences(MODE_PRIVATE);
// Leemos el dato guardado
int valor = settings.getInt("nombreDato", valor-por-defecto);

Observar que a la función getInt se le pasan dos parámetros: el primero, el nombre del valor, deberá corresponder con el nombre que demos a la variable cuando la guardemos; el segundo, el valor por defecto, será el valor retornado por la función si no se encuentra ningún valor con ese nombre.

Y para guardar los datos:

// Obtenemos la instancia de las preferencias de la Activity
SharedPreferences settings = getSharedPreferences(MODE_PRIVATE);
// Necesitamos un editor para poder modificar los valores de la instancia settings
SharedPreferences.Editor editor = settings.edit();
// Modificamos el valor deseado
editor.putInt("nombreValor", nuevo-valor);
// Una vez finalizado, llámando a commit se guardan las preferencias en memoria no volatil
editor.commit();

Muy importante no olvidar la última llamada a la función commit, ya que en caso contrario, nada quedará guardado.

Por supuesto, al igual que existen las funciones getInt y putInt, existen otras similares para otros tipos de datos, como getString y putString o getBoolean y putBoolean, etc.

 

Datos compartidos por varios Activities de la aplicación Android

Con el ejemplo anterior las preferencias de usuario de nuestra aplicación Android serán privadas de cada Activity y sólo accesibles desde la misma Activity que guardo el dato. Pero, ¿que ocurre si necesitamos compartir datos entre dos o más Activities?

// Obtenemos la instancia de las preferencias de la Activity
// pero ahora proporcionamos un nombre para el conjunto de preferencias compartido
SharedPreferences settings = getSharedPreferences("nombre-conjunto", MODE_PRIVATE);
// Igual que antes, obtenemos el valor con el par nombre-valor / valor-defecto
int valor = settings.getInt("nombreVariable", valor-por-defecto);

Observar que el procedimiento es el mismo que en el caso de datos privados de una Activity, pero en este caso, damos un nombre, que será compartido entre las Activities que necesiten acceder a los datos. De esa forma podemos tener varios conjuntos de preferencias, compartidos por grupos diferentes de Activities en nuestra aplicación Android.

De forma similar, para guardar las preferencias:

// Login correcto, guardamos en la configuracion...
SharedPreferences settings = getSharedPreferences("nombre-conjunto", MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putInt("nombreValor", nuevo-valor);
editor.commit();



Hey! Qué opinas sobre el artículo?