Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo guardar datos de pares clave-valor

Si tienes una colección relativamente pequeña de pares clave-valor que deseas guardar, debes usar las API 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 cómo usar las API de SharedPreferences para almacenar y recuperar valores simples.

Nota: Las API de SharedPreferences son para leer y escribir pares clave-valor. No debes confundirlas con las API de Preference, que te ayudan a crear una interfaz de usuario para la configuración de tu app (aunque también usan SharedPreferences para guardar la configuración del usuario). Para obtener información sobre las API de Preference, consulta la Guía para desarrolladores de configuración.

Cómo controlar las preferencias compartidas

Puedes crear un nuevo archivo de preferencias compartidas o acceder a uno existente llamando a uno de estos dos métodos:

  • getSharedPreferences(): utiliza 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 de Context en tu app.
  • getPreferences(): utiliza este método desde una instancia de Activity 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 forma exclusiva 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);
    

Precaución: Los modos MODE_WORLD_READABLE y MODE_WORLD_WRITEABLE se dieron de baja desde el nivel de API 17. A partir de Android 7.0 (API nivel 24), Android arroja un SecurityException si los usas. Si tu app necesita compartir archivos privados con otras aplicaciones, puede usar un FileProvider con la FLAG_GRANT_READ_URI_PERMISSION. Para obtener más información, consulta Cómo compartir archivos.

Si usas la API de SharedPreferences para guardar la configuración de la app, debes usar getDefaultSharedPreferences() en su lugar, a fin de 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.

Nota: Puedes editar las preferencias compartidas de manera más segura llamando al método edit() en un objeto EncryptedSharedPreferences, en lugar de hacerlo en un objeto SharedPreferences. Para obtener más información, consulta la guía sobre cómo trabajar con datos de forma más segura.

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)
        commit()
    }
    

Java

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

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);