60 votes

Stockez et récupérez un tableau de chaînes de caractères depuis les préférences partagées

J'ai besoin d'enregistrer dans les préférences partagées un tableau de chaînes de caractères et ensuite les récupérer. J'ai essayé ceci :

prefsEditor.putString(PLAYLISTS, playlists.toString()); où playlists est un String[]

et pour récupérer :

playlist= myPrefs.getString(PLAYLISTS, "playlists"); où playlist est une String mais cela ne fonctionne pas.

Comment puis-je faire cela?

102voto

Egor Points 15923

Vous pouvez créer votre propre représentation de chaîne de caractères du tableau de cette manière :

StringBuilder sb = new StringBuilder();
for (int i = 0; i < playlists.length; i++) {
    sb.append(playlists[i]).append(",");
}
prefsEditor.putString(PLAYLISTS, sb.toString());

Ensuite, lorsque vous obtenez la chaîne de caractères à partir des préférences partagées, il suffit de la parser comme ceci :

String[] playlists = playlist.split(",");

Cela devrait faire l'affaire.

0 votes

Ensuite, comment utilisez-vous getString()? Qu'utilisez-vous comme deuxième paramètre pour cela?

0 votes

@IgorG., C'est pratiquement à vous de décider, mettez en oeuvre votre propre logique pour vérifier le nombre d'éléments dans cette chaîne.

4 votes

Le problème de cela est que les chaînes de caractères ne peuvent pas contenir le caractère utilisé pour les séparer les unes des autres. Un encodage est nécessaire avant d'utiliser cette méthode.

35voto

Michael Liberman Points 487

À partir du niveau API 11, vous pouvez utiliser putStringSet et getStringSet pour stocker/récupérer des ensembles de chaînes :

SharedPreferences pref = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putStringSet(SOME_KEY, someStringSet);
editor.commit();

SharedPreferences pref = context.getSharedPreferences(TAG, Context.MODE_PRIVATE);
Set someStringSet = pref.getStringSet(SOME_KEY);

0 votes

Je pense que c'est plus facile que la réponse acceptée si quelqu'un construit une application à partir du niveau API 11 ou supérieur.

16 votes

Le problème est que Set n'est pas ordonné. Contrairement à String[]

0 votes

J'ai un tableau de chaînes de caractères avec des valeurs comme a,0 b,1 maintenant, en cliquant sur les paramètres, je veux changer ces valeurs. Comment utiliser putStringSet pour cela.

8voto

Jeff Gilfelt Points 15494

Vous pouvez utiliser JSON pour sérialiser votre tableau en tant que chaîne de caractères et le stocker dans les préférences. Consultez ma réponse et le code d'exemple pour une question similaire ici :

Comment écrire du code pour créer des préférences partagées pour un tableau dans Android ?

3voto

Dan Alboteanu Points 1570
HashSet mSet = new HashSet<>();
                mSet.add("donnée1");
                mSet.add("donnée2");
saveStringSet(context, mSet);

public static void saveStringSet(Context context, HashSet mSet) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = sp.edit();
    editor.putStringSet(PREF_STRING_SET_KEY, mSet);
    editor.apply();
}

et

public static Set getSavedStringSets(Context context) {
    SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
    return sp.getStringSet(PREF_STRING_SET_KEY, null);
}

private static final String PREF_STRING_SET_KEY = "clé_ensemble_de_chaines";

4 votes

Comme l'a noté @Tomáš Hubálek, Set n'est pas ordonné et pourrait donc changer le comportement de votre programme.

0voto

Hitesh Tarbundiya Points 435

Stockez une liste de tableaux dans les préférences en utilisant cette fonction simple, si vous voulez plus d'informations cliquez ici

public static void storeSerializeArraylist(SharedPreferences sharedPreferences, String key, ArrayList tempAppArraylist){
    SharedPreferences.Editor editor = sharedPreferences.edit();
    try {
        editor.putString(key, ObjectSerializer.serialize(tempAppArraylist));
        editor.apply();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Et comment obtenir une liste de tableaux stockée à partir des préférences

public static ArrayList getSerializeArraylist(SharedPreferences sharedPreferences, String key){
    ArrayList tempArrayList = new ArrayList();
    try {
        tempArrayList = (ArrayList) ObjectSerializer.deserialize(sharedPreferences.getString(key, ObjectSerializer.serialize(new ArrayList())));
    } catch (IOException e) {
        e.printStackTrace();
    }
    return tempArrayList;
}

0 votes

Ce lien est cassé. ObjectSerializer n'est pas une classe en Android.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X