0

Ich versuche, eine benutzerdefinierte Klasse mit ArrayLists zu SharedPreferences mit GSON zu speichern. Jedes Mal, wenn ich den Bildschirm rotiere, beginnt die Aktivität von vorne und die von gson erzeugte Zeichenfolge scheint die ArrayList an die vorherige Zeichenfolge anzuhängen, anstatt sie zu ersetzen.ArrayList unbeabsichtigt am Ende der GSON String jedes Mal, wenn ich den Bildschirm drehen

Die SimpleUserValues Klasse ist nur eine Klasse zum Speichern von Benutzerinformationen, mit einem leeren Konstruktor und privaten ArrayLists zusammen mit ihren entsprechenden Setter und Getters.

Der Code in meiner Tätigkeit ist wie folgt:

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(); 
} 

Der Ausgang I von Log.e sehen ist wie folgt:

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],... 

Irgendwelche Ideen/bekannte Probleme? Ich lösche sogar die vorher gespeicherte Zeichenkette vor dem Schreiben, so dass ich nicht verstehen kann, woher diese Anhängung kommt. Die Eingabe in SimpleUserValues ​​ist immer gleich. Vielen Dank im Voraus :)

EDIT: Hier ist es die individuelle Klasse SimpleUserValues:

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

Poste den Code für deine 'UserValues' /' SimpleUserValues' (?) Klassen. Gemeinsame Einstellungen werden nicht angehängt, daher denke ich, dass das Problem darin enthalten sein könnte. Sie haben nicht genügend Code angegeben, um zu sehen, wo sich Ihr Problem gerade befindet. –

Antwort

0

Ich hatte einen Fehler in der Arrays ich spare, mehr Zeilen anstatt sie zu ersetzen hinzuzufügen. Hoppla. Danke @Kane für deinen Kommentar