J'essaie d'enregistrer une classe personnalisée contenant ArrayLists
à SharedPreferences
en utilisant GSON. Chaque fois que je fais tourner l'écran, l'activité recommence et la chaîne générée par gson semble ajouter la ArrayList
à la chaîne précédente, au lieu de la remplacer.ArrayList ajouté involontairement à la fin de GSON String chaque fois que je fais tourner l'écran
La classe SimpleUserValues
est juste une classe pour stocker des informations utilisateur, avec un constructeur vide et privé ArrayLists
avec leurs setters et getters correspondants.
Le code de mon activité est la suivante:
SimpleUserValues simpleUserValues = SimpleUserValues.newInstance();
simpleUserValues.setTheBooleans(userValues.getTheBooleans());
Gson gson = new Gson();
Type classType = new TypeToken<SimpleUserValues>() {
}.getType();
String insertedJSON = gson.toJson(simpleUserValues, classType);
if (getSharedPreferences(myAppKey, MODE_PRIVATE).contains("JSON")) {
Log.e("insertedJSON ", getSharedPreferences(myAppKey, MODE_PRIVATE)
.getString("JSON", ""));
getSharedPreferences(myAppKey, MODE_PRIVATE).edit().remove("JSON")
.commit();
getSharedPreferences(myAppKey, MODE_PRIVATE).edit()
.putString("JSON", insertedJSON).commit();
} else {
getSharedPreferences(myAppKey, MODE_PRIVATE).edit()
.putString("JSON", insertedJSON).commit();
}
La sortie que je vois de Log.e est comme ceci:
insertedJSON﹕ {"theBooleans":[true,true,true,true,true,true],...
insertedJSON﹕ {"theBooleans":[true,true,true,true,true,true,true,true,true,true,true,true],...
insertedJSON﹕ {"theBooleans":[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],...
insertedJSON﹕ {"theBooleans":[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],...
Toutes les idées/problèmes connus? Je suis même en train de supprimer la chaîne précédemment enregistrée avant d'écrire, donc je ne peux pas comprendre comment cela vient. L'entrée dans SimpleUserValues est toujours la même. Merci d'avance :)
EDIT: ici ce sont les SimpleUserValues de classe personnalisée:
public class SimpleUserValues {
private int theCurrentFragment;
private int theCurrentGraph;
private ArrayList<Boolean> theBooleans;
private ArrayList<Integer> theIntegers;
public SimpleUserValues() {
}
public static SimpleUserValues newInstance(){
return new SimpleUserValues();
}
public ArrayList<Boolean> getTheBooleans() {
return theBooleans;
}
public void setTheBooleans(ArrayList<Boolean> theBooleans_) {
theBooleans = theBooleans_;
}
public ArrayList<Integer> getTheIntegers() {
return theIntegers;
}
public void setTheIntegers(ArrayList<Integer> theIntegers_) {
theIntegers = theIntegers_;
}
public int getTheCurrentFragment() {
return theCurrentFragment;
}
public void setTheCurrentFragment(int theCurrentFragment_) {
theCurrentFragment = theCurrentFragment_;
}
public int getTheCurrentGraph() {
return theCurrentGraph;
}
public void setTheCurrentGraph(int theCurrentGraph_) {
theCurrentGraph = theCurrentGraph_;
}
}
Postez le code de vos classes 'UserValues' /' SimpleUserValues' (?). Les préférences partagées ne sont pas ajoutées, donc je pense que le problème pourrait être là. Vous n'avez pas donné assez de code pour voir où est votre problème en ce moment. –