Si tienes una colección relativamente pequeña de pares clave-valor que deseas guardar, debes usar las APIs de SharedPreferences
. Un objeto SharedPreferences
apunta a un archivo que contiene pares clave-valor y proporciona métodos sencillos para leerlos y escribirlos. El framework administra cada archivo de SharedPreferences
, que puede ser privado o compartido.
En esta página, se muestra el uso de las APIs de SharedPreferences
para almacenar y recuperar valores simples.
Cómo controlar las preferencias compartidas
Puedes crear un nuevo archivo de preferencias compartidas o acceder a uno existente llamando a uno de estos métodos:
getSharedPreferences()
: Usa este método si necesitas varios archivos de preferencias compartidas identificados por nombre, que especificas con el primer parámetro. Puedes llamar a este método desde cualquier instancia deContext
en tu app.getPreferences()
: Usa este método desde una instancia deActivity
si necesitas utilizar un solo archivo de preferencias compartidas para la actividad. Como este método recupera un archivo de preferencias compartidas predeterminado que pertenece a la actividad, no necesitas indicar un nombre.
Por ejemplo, el siguiente código accede al archivo de preferencias compartidas identificado por la string de recursos R.string.preference_file_key
y lo abre con el modo privado para que solo tu app pueda acceder al archivo:
Kotlin
val sharedPref = activity?.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE)
Java
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
Cuando asignes un nombre a tus archivos de preferencias compartidas, este debe ser identificable de manera inequívoca con tu app. Una manera fácil de hacerlo es agregar el nombre del archivo al ID de aplicación. Por ejemplo: "com.example.myapp.PREFERENCE_FILE_KEY"
.
De forma alternativa, si necesitas solo un archivo de preferencias compartidas para tu actividad, puedes utilizar el método getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Si usas la API de SharedPreferences
para guardar la configuración de la app, debes usar getDefaultSharedPreferences()
en su lugar, para obtener el archivo de preferencias compartidas predeterminado para toda la app. Para obtener más información, consulta la Guía para desarrolladores de configuración.
Cómo escribir en las preferencias compartidas
Para realizar operaciones de escritura en el archivo de preferencias compartidas, crea un SharedPreferences.Editor
llamando a edit()
en tu SharedPreferences
.
Pasa las claves y los valores que desees escribir con métodos como putInt()
y putString()
. Luego, llama a apply()
o a commit()
para guardar los cambios. Por ejemplo:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return with (sharedPref.edit()) { putInt(getString(R.string.saved_high_score_key), newHighScore) apply() }
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score_key), newHighScore); editor.apply();
apply()
cambia el objeto SharedPreferences
en la memoria de inmediato, pero escribe las actualizaciones en el disco de forma asíncrona. Como alternativa, puedes usar commit()
para escribir los datos en el disco de forma síncrona. Sin embargo, debido a que commit()
es síncrono, debes evitar llamarlo desde tu subproceso principal, ya que podría pausar el procesamiento de la IU.
Cómo leer desde las preferencias compartidas
Para recuperar valores de un archivo de preferencias compartidas, llama a métodos como getInt()
y getString()
, proporciona la clave del valor que desees y, opcionalmente, un valor predeterminado para mostrar si no se encuentra la clave. Por ejemplo:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE) ?: return val defaultValue = resources.getInteger(R.integer.saved_high_score_default_key) val highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.integer.saved_high_score_default_key); int highScore = sharedPref.getInt(getString(R.string.saved_high_score_key), defaultValue);