2016-09-07 3 views
0

Ich bin ein iOS-Entwickler, der versucht, Android zu lernen, und ich möchte sicherstellen, dass ich Best Practices befolge.Der beste Ort, um benutzerdefinierte Objekte zu speichern, damit alle Aktivitäten sie sehen können

Ich habe benutzerdefinierte Objekte, die durch 1 -> m Aktivitäten zugänglich sein müssen, und sie müssen gespeichert werden, wenn die Anwendung geschlossen wird. Derzeit verwende ich SharedPreferences, Code unten, um sie zu speichern, aber ich bin mir nicht sicher, ob es die beste Route ist. Sollte ich ein Singleton benutzen? Gibt es einen besseren Weg?

SharedPreferences mPrefs = getPreferences(MODE_PRIVATE); 
Editor prefsEditor = mPrefs.edit(); 
Gson gson = new Gson(); 
String json = gson.toJson(userProfile); 
prefsEditor.putString("UserProfile", json); 
prefsEditor.commit(); 

gson = new Gson(); 
json = mPrefs.getString("UserProfile", ""); 
UserProfileObject outObject = gson.fromJson(json, UserProfileObject.class); 

Antwort

2

Ein Singleton wird nicht gespeichert, wenn die Anwendung beendet wird. Wirklich Ihre Möglichkeiten sind:

* SharedPreferences. Gut für eine kleine Anzahl von Schlüssel/Wert-Paaren

* Datenbank. Gut für relationale Daten

* Datei auf der Festplatte, in welchem ​​Format Sie auch bevorzugen. Gut für jede Datenmenge, aber Sie müssen möglicherweise einen benutzerdefinierten Parser schreiben.

Das Speichern von JSON in einer gemeinsamen Einstellung ist ein bisschen seltsam. Es ist nicht schrecklich, solange Sie nicht viele Schlüssel darin speichern, aber es scheint, als ob Sie nicht wissen, wie man eine Datei schreibt.

+0

Ich google meinen Weg durch Lernen Android-Entwicklung Ich kann herausfinden, wie man eine Datei schreibt. Vielen Dank – user1079052

0

@Gabe hat eine gute Antwort geliefert. Ich füge meine 2 Cents hinzu

Ich persönlich mag es nicht, serialisierte Daten in SharedPreferences zu speichern. Stattdessen würde ich lokalen DB-Speicher wie SQLite oder Realm verwenden, um es zu speichern. Der Grund für die Serialisierung/Deserialisierung ist das Marshalling/Remarshaling von Objekten mithilfe von Reflektion, die möglicherweise die Leistung negativ beeinflussen können.

Kurz gesagt, lokale db für komplexe/relationale Daten und SharedPreferences Speicher zum Speichern von einfachen Daten

0

Ich denke, wenn Ihre UserProfileObject leicht von Json konstruiert werden und es enthält keine sensiblen Daten (zB Passwort) , könnte in Ordnung sein, nur in SharedPreferences (nur speichern Sie die JSON-String wie das, was Sie tun).

Die Verwendung einer Singleton-SessionManager/ProfileManager-Klasse sollte ausreichen. Obwohl es möglicherweise von 1 -> m Aktivitäten verwendet wird, trifft es nur die SharedPreferences einmal mit dem Singleton. Stellen Sie sicher, dass Sie die Kopie der Daten im Singleton und in SharedPreferences synchron halten, wenn Änderungen vorgenommen werden. Oder lassen Sie einfach den Singleton alle zusammen und drücken Sie die SharedPreferences jedes Mal, wenn Sie es brauchen (weniger Sorgen, dass Kopien synchron bleiben), denken Sie nicht, dass Ihr Anwendungsfall es so sehr hämmern wird.

Verwandte Themen