2016-04-24 13 views
0

Ich habe eine App für Android gemacht, die Ergebnisse für Tontaubenschießen speichert. Während einer Sitzung drückt der Benutzer entweder Treffer oder Fehlschlag. Wenn die Sitzung beendet ist, drückt der Benutzer auf Speichern und das neue Ergebnis wird an das json-Objekt angehängt. Danach wird das Ergebnis angehängt wird, wird es überGespeicherte Daten verschwinden vom Handy

mit dem Telefon gespeichert
public static void saveData(Context context) { 
    File path = context.getFilesDir(); 
    File file = new File(path, "jsonUsr.json"); 

    if (file.exists()) { 
     try { 
      FileOutputStream stream = new FileOutputStream(file); 
      String objString = usrObject.toString(); 
      stream.write(objString.getBytes()); 
      stream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Nun, mein Freund, meine App hat es verwendet, wenn wir an einem Wettbewerb wurden heute. Während der Sitzung, als meine App lief und er sein Ergebnis ausgefüllt hatte, erhielt er eine SMS. Er öffnet die Nachricht und liest sie. Dann, anstatt meine App aus den laufenden Apps wieder zu öffnen, geht er zur Meny und drückt auf das Icon. Plötzlich entdeckt er, dass alle Daten weg sind! Nicht nur die aktuelle Sitzung, sondern alle Ergebnisse, die er eingegeben hat. Ich kann das nicht verstehen, weil es im Code gar keinen Aufruf gibt, der die gespeicherte JSON-Zeichenkette löscht.

Ich habe versucht zu imitieren, was er auf meinem Handy tat, aber es funktioniert perfekt. Er hatte mit seinem Telefon viele Probleme mit der Erinnerung. Vor ein paar Tagen beschwerte es sich darüber, dass es nicht genügend Speicher für das Upgrade gab, also bewegte er Dinge auf die SD-Karte? Ist es möglich, dass die Daten entweder aufgrund von Speichermangel entfernt wurden oder dass sie auf die SD-Karte verschoben wurden?

Es ist nicht so viel zu arbeiten, aber ich habe nicht mehr. Da ich es nicht selbst erstellen kann, ist es schwer zu wissen, was genau passiert ist.

+0

Haben Sie keine Datenbank verwendet? –

Antwort

0

Es ist eine gute Idee, immer in eine neue Datei im selben Verzeichnis zu schreiben. Wenn dieser Schreibvorgang erfolgreich ist, verschieben Sie die neue Datei in die Konfigurationsdatei, indem Sie ihren Namen ändern. (diese Änderung ist atomar)

Auf diese Weise werden Sie immer mit einer gültigen Datei enden, auch wenn der Aufruf zum Schreiben aus irgendeinem Grund fehlschlägt (out of disk, toString() fehlschlägt, etc.).