Android Serialisierung

A

Aeglasin

Gast
Hi,
ich möchte für mein Android-projekt meine Klassen persistieren können, damit ich einen Zustand auch anch dem neustart des handys/Emulators wieder habe.
Das Problem das ich grade dabei habe ist das ich nicht so wirklich weis, wie ich das am geschicktesten und schnellsten mache.

Ich hab defakto 4 Klassen die ich persistieren muss, das hauptproblem ist das die möglichkeiten die ich im Internet bisher entdeckt habe alle bei meiner Klassenstruktur probleme haben drüften, die 4 Klassen sind recht eng miteinander verbunden,
es handelt sich um eine Nutzer-Kurs-Task und ShownTask-klasse.
besonders die Nutzer und Kurs klassen machen mir da das leben Schwer da ich hier mit HashSets arbeite um die zu den Nutzern und den Kursen gehörigen Tasks festzuhalten,
noch dazu hat jeder Task einen Kurs und jeder ShownTask einen zugehörigen Task.
Ich hatte erst an eine persistierung per Datenbank gedacht, aber ich glaube die SQLLite version die android da anbietet hätte hier wahrscheinlich ehr suboptimal wäre, insbesondere da ich die API10 verwenden muss (Studienvorgabe)
 

schlingel

Gesperrter Benutzer
Ich hatte erst an eine persistierung per Datenbank gedacht, aber ich glaube die SQLLite version die android da anbietet hätte hier wahrscheinlich ehr suboptimal wäre
Warum? Du müsstest einfach nur ein ordentliches Datenmodell dafür bauen.

e Nutzer und Kurs klassen machen mir da das leben Schwer da ich hier mit HashSets arbeite um die zu den Nutzern und den Kursen gehörigen Tasks festzuhalten
Und wo ist das Problem?

Die einfachste Variante wäre, du lässt deine Klassen Serializable implementieren und serialisierst die Objekte einfach in ein File.

Aja, eine Frage noch: Wo ist der Vorteil von API 11 oder einer anderen API > 10 für dein Problem?
 

Gregorrr

Bekanntes Mitglied
Die SQLite Datenbank ist das best für sowas. Das Modell was du hast, lässt sich doch gut abbilden. Ein HashSet ist eine geordnete, indizierte Tabelle.

Edit: HashSet mit HashMap verwechselt^^
 
Zuletzt bearbeitet:
A

Aeglasin

Gast
Die SQLite Datenbank ist das best für sowas. Das Modell was du hast, lässt sich doch gut abbilden.
Ok danke, hab zwischenzeitlich das die HashSets au in etwas behilfsmäßige HashMaps umgewandelt, damit sollte das ganze noch etwas besser gehen.
Ich dachte nur es gibt vielleicht eine schnellere und effiziente Variante, und wollt vorher lieber fragen bevor ich jetzt irgend nen Mist programmier und mir nach gesagt wird, mit methode XY-wärs schneller und besser gegangen^^
 
A

Aeglasin

Gast
Eine Frage hätt ich noch zum SQLite unter Android, hoffe mal das passt hier noch rein, da die Bibliotheken ja aus einem android. Package kommen^^
Und zwar wird in verschiedenen Tutorials bei mir der eindruck erzeugt man MUSS einen Cursor verwenden um etwas in die Datenbank rein zu schreiben.
aber was genau tut dann der befehl:

Java:
database.insert("Kurs", null, values);
? von Wortbedeutung her würde ich ehr sagen DIESER befehl fügt defakto ein und einen Cursor brauche ich nur wenn ich direkt wieder was auslesen will oder is meine denke da falsch?
 

Gregorrr

Bekanntes Mitglied
Ich dachte nur es gibt vielleicht eine schnellere und effiziente Variante, und wollt vorher lieber fragen bevor ich jetzt irgend nen Mist programmier und mir nach gesagt wird, mit methode XY-wärs schneller und besser gegangen^^

Ich denke man muss das im Gesamtkontext betrachten. Bei einer mobilen Applikation ist jederzeit die Möglichkeit gegeben, dass dein Programm angehalten wird, wenn man beispielsweise einen Telefonanruf bekommt, die Batterie zu Ende geht, etc., kann man nicht einfach noch schnell "abspeichern" drücken. Hier sollte man möglichst die Daten aktuell halten.

SQLite ist eine sehr leichtgewichtige und schnelle Lösungen. Es ist gar anders als "herkömmliche" DB, wie bspw. MySQL. So sind Lesezugriffe bspw. wesentlich schneller, da dies lediglich einem Datei-Zugriff entspricht (die SQL-Datenbank wird ja in einer Datei abgespeichert). Zudem unterstützt SQLite sehr viele Features, bspw. Transaktionen, man kann ja viele SQL-Befehle ausdrücken, etc. Zudem ist SQLite extremst gut programmiert worden (sehr hohe Testabdeckung, hohe Zuverlässigkeit - falls mal die Batterie zu Ende gehen sollte, ist die Wahrscheinlichkeit, dass es zu Fehlern kommt geringer als bspw. bei einer Datei.

Zudem sind wir ja auf einem Mobilgerät, obwohl diese heutzutage mehr Arbeitsspeicher haben, ist es dennoch nicht üblich, das gesamte Modell im Hauptspeicher zu haben. Hier bietet sich eine leichtgewichtige DB super an, weil man mit Inkrementen arbeitet, am besten über einen Cursor (für eine Applikation), oder Content Provider (über Applikationsgrenzen hinweg). D.h. man zieht sich immer nur die benötigten Daten in den Hauptspeicher (meist eine Reihe), manipuliert diese und schreibt sie wieder zurück in die DB, um den RAM nicht zu sehr zu belasten.

Zudem bietet uns die DB ein Protokoll an, wir müssen kein eigenes Protokoll implementieren, um Daten in eine Datei zu Schreiben/Lesen. Eine DB ist in Android sehr schnell eingerichtet.

Genau, mit insert(), query(), update(), delete() die CRUD-Operationen ausführen, wobei query() immer einen Cursor liefert. Zunächst macht man ein db.query(), dann kann man mit dem Cursor iterieren und mit get*() die einzelnen Spalteneinträge sich holen.
 
A

Aeglasin

Gast
Herzlichen dank, dann is die Verwirrung au beseitigt^^
Danke für die ganze Hilfe
Gruß
Aeglasin
 

Ähnliche Java Themen

Neue Themen


Oben