2 votes

Liste Android dans SharedPreference

J'essaie de modifier les valeurs de la liste dans les préférences partagées, mais quelque chose ne va pas.

Ma préférence partagée est :

public class StepsData {
    static SharedPreferences data;
    static SharedPreferences.Editor editor;
    static final int VALUE_KEY = 0;
    static final List<String> LIST_KEY= new Vector<String>();
}

J'utilise SharedPref by :

StepsData.data = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE);
StepsData.editor = StepsData.data.edit();

Si je veux modifier ou obtenir une valeur de VALUE_KEY, tout fonctionne correctement :

int step = StepsData.data.getInt(String.valueOf(VALUE_KEY), 0);
editor.putInt(String.valueOf(VALUE_KEY), 0).apply();

mais j'ai un problème avec l'utilisation de List, mon code pour obtenir la valeur est :

List<String> myList = (List<String>) data.getStringSet(String.valueOf(LIST_KEY),null);

et pour la suppression :

List<String> clearList = new Vector<String>();
editor.putStringSet(String.valueOf(LIST_KEY), (Set<String>) clearList).apply();

mais il y a une NullPointerException. Quelle est la meilleure façon d'utiliser quelque chose comme ".clear()" sur la liste de SharedPreference et comment est-il possible d'obtenir des valeurs à partir de cette liste et de la taille ?

4voto

chetan Points 456

Si vous souhaitez stocker un objet de type liste dans une préférence partagée, utilisez la bibliothèque gson. Elle convertira l'objet liste au format json et stockera cette chaîne json dans sharedPref.
Il faut d'abord inclure cette ligne dans le fichier gradle (niveau app)

compile 'com.google.code.gson:gson:2.4'

Le code ci-dessous permet de définir le type de liste

Type listType = new TypeToken<List<String>>(){}.getType();

Gson gson = new Gson();

Créez maintenant un objet liste et convertissez-le au format json à l'aide de l'objet gson et du type

List<String> myList = new ArrayList<>();
//add elements in myList object

String jsonFormat = gson.toJson(myList,listType);  
//adding to sharedPref  
editor.put("list",jsonFormat).apply();

Maintenant, nous récupérons les valeurs de sharedPref et convertissons la chaîne json en objet List.

//this line will get the json string from sharedPref and will converted into object of type list(specified in listType object) 
List<String> list = gson.fromJson(sharedPref.get("list",""),listType);  
//now modify the list object as par your requirement and again do the same step of converting that list object into jsonFormat.

1voto

Sushil Kumar Points 4456

Les éléments suivants :

Déclarer myList globalement :

ArrayList<String> myList = new ArrayList<String>();

Pour la valeur de réglage :

for (int i = 0; i < totalSize; i++) {
    PreferenceManager.getDefaultSharedPreferences(this)
                     .edit()
                     .putString("number" + i, value + "").commit();         
}

Pour obtenir de la valeur :

for (int i = 0; i < totalSize; i++) {
   myList.add(PreferenceManager.getDefaultSharedPreferences(this)
                               .getString("number" + i, "0"));
}

REMARQUE:- totalSize est la taille de votre tableau

1voto

Mithat Konuk Points 357

Pourquoi utiliser une liste (qui contient des éléments en double) ?
obtenir tous les éléments de la préférence partagée

Set<String> set = preference.getStringSet("key", null);

//Set the values
Set<String> set = new HashSet<String>();
set.addAll(listOfExistingScores);
preferenceEditor.putStringSet("key", set);
preferenceEditor.commit();

si vous devez utiliser la liste, vérifiez ceci https://gist.github.com/cr5315/6200903

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