Guardando colecciones clave-valor

Si quieres guardar una colección de pares clave-valor relativamente pequeña, deberías usar las APIs SharedPreferences o preferencias compartidas. Un objeto SharedPreferences tiene asociado un archivo que contiene pares clave-valor y proporciona métodos sencillos para leer y guardar esta información. La plataforma gestiona los archivos SharedPreferences, que pueden ser privados o compartidos.

Esta clase te enseñará a usar las APIs SharedPreferences para almacenar y leer valores simples.

Nota: Las APIs SharedPreferences sirven únicamente para leer y guardar pares clave-valor; no hay que confundirlas con las APIs Preference, que te ayudan a desarrollar una interfaz de usuario para las preferencias de tu aplicación (aunque estas utilizan las SharedPreferences para guardarlas). Para más información acerca del uso de las APIs Preference, lee la guía de Preferencias.

Obtener un manejador de las preferencias compartidas


Puedes crear un nuevo archivo de preferencias compartidas o acceder a uno ya creado usando dos métodos distintos:

  • getSharedPreferences() — Usa este método si necesitas múltiples archivos identificados por un nombre que se pasará como primer parámetro. Puedes llamar a este método desde cualquier instancia de Context de tu aplicación.
  • getPreferences() — Usa este método desde una instancia de Activity cuando necesites un archivo de preferencias compartidas para la actividad. Como este método devuelve el archivo asociado por defecto con la actividad que lo llama, no necesitas indicar un nombre.

Por ejemplo, el siguiente código se ejecuta dentro de una instancia de Fragment. Accede al archivo de preferencias compartidas identificado por el recurso cadena R.string.preference_file_key y lo abre usando el modo privado de forma que sólo esté disponible para tu aplicación.

Context context = getActivity();
SharedPreferences sharedPref = context.getSharedPreferences(
        getString(R.string.preference_file_key), Context.MODE_PRIVATE);

A la hora de nombrar tu archivo de preferencias compartidas, deberías usar un nombre que identifique unívocamente a tu aplicación, como "com.example.myapp.PREFERENCE_FILE_KEY"

Alternativamente, si sólo necesitas un único archivo de preferencias compartidas para tu actividad, puedes usar el método getPreferences():

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

Precaución: Si creaste un archivo de preferencias compartidas con MODE_WORLD_READABLE o MODE_WORLD_WRITEABLE, cualquier aplicación que conozca el identificador del archivo podrá acceder a tus datos.

Guardar información en las preferencias compartidas


Para escribir en el archivo de preferencias compartidas, crea una instancia de SharedPreferences.Editor llamando al método edit() de tus SharedPreferences.

Pasa como argumento las claves y los valores que quieras escribir con métodos como putInt() y putString(). Después llama a commit() para aplicar los cambios. Por ejemplo:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt(getString(R.string.saved_high_score), newHighScore);
editor.commit();

Leer de las preferencias compartidas


Para leer valores de un archivo de preferencias compartidas, podemos llamar a métodos tales como getInt() y getString(), pasando como argumento la clave para el valor que buscamos, y opcionalmente un valor por defecto a devolver si no se encuentra la clave. Por ejemplo:

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);