0

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_; 
    } 

} 
+1

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. –

Répondre

0

J'ai eu un bug dans les tableaux que je gardais, en ajoutant plus de lignes au lieu de remplacer. Oops. Merci @Kane pour votre commentaire