Si vous souhaitez enregistrer une collection de clés/valeurs dont la taille est relativement petite, vous pouvez utiliser les API SharedPreferences
. Un objet SharedPreferences
renvoie vers un fichier contenant des paires clé/valeur et fournit des méthodes simples pour les lire et les écrire. Chaque fichier SharedPreferences
est géré par le framework. Il peut être privé ou partagé.
Cette page vous explique comment utiliser les API SharedPreferences
pour stocker et récupérer des valeurs simples.
Générer un handle vers les préférences partagées
Vous pouvez créer un fichier de préférences partagées ou accéder à un fichier existant en appelant l'une des méthodes suivantes :
getSharedPreferences()
: utilisez cette option si vous avez besoin de plusieurs fichiers de préférences partagées identifiés par leur nom, que vous spécifierez avec le premier paramètre. Vous pouvez appeler celle option à partir de n'importe quel objetContext
dans votre application.getPreferences()
: utilisez cette option à partir d'un élémentActivity
si vous n'avez besoin que d'un seul fichier de préférences partagées pour l'activité. Étant donné que cette option récupère un fichier de préférences partagées par défaut appartenant à l'activité, vous n'avez pas besoin de fournir un nom.
Par exemple, le code suivant accède au fichier de préférences partagées identifié par la chaîne de ressources R.string.preference_file_key
et l'ouvre en mode privé, de sorte que le fichier ne soit accessible que par votre application :
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);
Lorsque vous nommez des fichiers de préférences partagées, vous devez attribuer un nom unique à votre application. Pour ce faire, il vous suffit de faire précéder le nom de votre fichier de l'ID d'application ("com.example.myapp.PREFERENCE_FILE_KEY"
, par exemple).
Si vous n'avez besoin que d'un seul fichier de préférences partagées pour votre activité, vous pouvez également utiliser la méthode getPreferences()
:
Kotlin
val sharedPref = activity?.getPreferences(Context.MODE_PRIVATE)
Java
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Si vous enregistrez les paramètres de l'application avec l'API SharedPreferences
, utilisez plutôt getDefaultSharedPreferences()
afin d'obtenir le fichier de préférences partagées par défaut pour l'ensemble de votre application. Pour en savoir plus, consultez le guide du développeur spécifique aux paramètres.
Écrire dans les préférences partagées
Pour écrire dans un fichier de préférences partagées, créez un élément SharedPreferences.Editor
en appelant edit()
au niveau de SharedPreferences
.
Transmettez les clés et les valeurs que vous souhaitez écrire à l'aide de méthodes telles que putInt()
et putString()
. Appelez ensuite apply()
ou commit()
pour enregistrer les modifications. Par exemple :
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()
modifie immédiatement l'objet SharedPreferences
en mémoire, mais écrit les mises à jour sur le disque de manière asynchrone. Vous pouvez également utiliser commit()
pour écrire les données sur le disque de manière synchrone. Cependant, comme commit()
est synchrone, évitez de l'appeler à partir de votre thread principal, car cela pourrait suspendre le rendu de l'interface utilisateur.
Lire à partir des préférences partagées
Pour récupérer les valeurs d'un fichier de préférences partagées, appelez des méthodes telles que getInt()
et getString()
, en fournissant la clé correspondant à la valeur souhaitée, et éventuellement une valeur par défaut à renvoyer si cette clé est absente. Par exemple :
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);