0

Ich verwende SharedPreferences, um Objektfelder persistent zu machen. Nehmen Sie dieses Beispiel:Sicherstellen, dass die SharedPreference korrekt zurückgeschrieben wird

class Item { 

    private String note; 

    public void setNote(String newNote) { 
     this.note = newNote; 
     update(); 
    } 

    private void update() { 
     String json = ....; // create JSON image of the object 

     Editor editor = App.getAppPrefs().edit(); // Load SharedPreferences editor 
     editor.putString("exampleItem", json); 
     editor.apply(); 
    } 

SetNote() (und somit aktualisieren()) aufgerufen wird jedes Mal eine "Note" -EditText geändert wird.

Jetzt habe ich mehrere Fragen: Wie kann ich überprüfen, dass die neueste Version von "Notiz" gespeichert ist? Besteht die Möglichkeit, dass der letzte Aufruf von einem früheren Aufruf an den Editor überschrieben wird? Wie kann ich die Arbeitsbelastung minimieren? Es muss einen klügeren, leichteren Weg geben als apply() 100x für einen 100 Zeichen langen Text.

+1

Wie wäre es mit einer Flagge, und wenn der Benutzer nicht mehr als ein paar Sekunden getippt hat, dann speichern? Das Speichern sollte fast sofort erfolgen, aber wenn Sie nicht jedes Zeichen speichern müssen, das ein Benutzer schreibt, dann tun Sie es regelmäßig. – Mimminito

+0

Dies ist eine ausgezeichnete Idee. Vielen Dank! – damaxxed

Antwort

1

Sie können einfach synchronized verwenden, damit der Thread warten kann, bis der alte Thread seine Arbeit für die Aktualisierung abgeschlossen hat.

private synchronized void update() { 
} 
0

Sie können editor.commit(); Um zu überprüfen, ob die neueste Version der Notiz gespeichert ist, können Sie die vorherige Version entfernen und dann die neue Notiz speichern. Dann können Sie je nach Bedarf entweder eine Toast-Nachricht oder ein Syso verwenden.

+0

Ich verstehe Ihren Punkt nicht ganz @Deepak. Wenn editor.putX() immer überschreibt, warum soll ich zuerst die vorherige Version entfernen? Und wie kann ich prüfen, ob die letzte Version gespeichert wurde und nicht durch einen anderen Schreibversuch kompromittiert wurde? – damaxxed