Objekte speichern & laden

  • 18 Antworten
  • Letztes Antwortdatum
akra

akra

Ambitioniertes Mitglied
6
Guten Tag!

ich versuche für mich derzeit an einer Art Trainingsplan app, bei der man Übungen auswählen kann die man an einem Tag machen muss/soll

ich möchte mehrere Übungen(in diesem Fall Objekte) abspeichern und wieder laden können, diese Objekte will ich auch in einer Liste zeigen können und wieder aus der liste entfernen können
die Objekte also Übungen sollen aus Name,4-int variablen und einer Notiz(Beschreibung zu dieser Übung) also evnt längerem Text bestehen.

mein Problem ist, ich weiß nicht wie ich diese Abspeichern oder realisieren sollte?
einfach nur in Java kann ich einfache Objekte serialisieren und wieder zurück laden aus/in eine Datei wenn ich dieses in Android versuche zu realisieren dann geschieht iwie nichts, die Datei in die Abgespeichert werden soll bleibt (in Eclipse) einfach leer
Ich weiß auch nicht ob Serialisierung hier der richtige weg ist?

könnte mir jemand ein paar Tipps geben wie ich dieses Realisieren könnte?
 
Naja, du kannst eine Datenbank erstellen und die Objekte dadrin speichern.
Beim Start der App gibst du die Objekte/Übungen einfach wieder aus.
Google einfach mal nach einem Datenbank Tutorial mit add/delete Funktion.
Und zu den Übungen kannst du auch die Beschreibung speichern, also als String. ;)
Gruß
 
Na du kannst doch in Android genauso die serialiserten Objekte speichern - in eine Datei oder eine Datenbank.
Wenn Du sie in eine Datei speichern willst musst Du natürlich die entsprechenden Schreibrechte in dem Ordner haben.
 
Die kompletten Objekte zu speichern, geht - wie bereits geschrieben - über Serialisierung. Dazu muss die Klasse des Objekts als serialisierbar gekenntzeichnet werden. Wenn in der Klasse andere Klasse verwendet werden, müssen diese ebenfalls serialisierbar sein.

Eine weitere Möglichkeit, die ohne zusätzliche Schreibrechte auskommt, sind Benutzerdaten. Du erstellst zu jedem Übungsobjekt einen String mit den zu speichernden Daten (z.B. ID#Datum#Zeit#Titel; #=Trennzeichen). Anschließend fügst du alle Objekte zusammen, trennst sie mit einem weiteren Trennzeichen (z.B. "/") und schreibst sie in eine Datei:

final String FILE = "userdata";
FileOutputStream fos = openFileOutput(FILE, Context.MODE_PRIVATE);
fos.write(uebung.getData() + "/").getBytes());
fos.close();

Auslesen kannst du die Datei mittels:

FileInputStream fis = openFileInput(FILE);
int i;
String s = "";
while ((i = fis.read()) != -1) {
s += (char) i;
}
String[] uebungen = s.split("/");

String.split trennt die Daten, immer wenn ein "/" vorkommt. Das "/" bleibt jedoch in den Strings enthalten.
 
Din FileOutputStream in einen DataOutputStream packen und dann writeInt+writeUTF (bzw. DataInputStream + readInt+readUTF) zu nehmen, wäre eleganter.
 
Vielen dank für die antworten erst mal!

von Serialisierung wollte ich mich erst mal entfernen und habe mit SQlite probiert und es klappt soweit, der Anfang ist gemacht/gelegt
konnte eine Datenbank mit mehreren Tabellen anlegen und kann diese mit "SQLite Database Browser" schön bearbeiten/erweitern
kann nun Sachen aus dieser Datenbank Laden und als Listview schön anzeigen, muss noch viel implementiert werden. Aber der schwierige/unbekannte Teil ist überwunden.
Bei Interesse kann ich, wenn es soweit ist die .apk auch hier zeigen bzw habs vor ins Market zulegen (das ganze muss spätestens ende des Jahres fertig sein)
 
Ich hätte noch eine Frage bezüglich der Ablage der Datenbank-Datei
wenn ich die Datenbank erstellt habe, kann ich ja diese mit "DDMS>File Explorer" unter /data/data/"paket"/databases/ einsehen und auch exportieren usw

nur wie gebe ich diese Datenbank in die .apk "mit"?
im Emulator funktioniert es gut, aber beim ausprobieren am Handy wird wohl die Datenbank nicht mitgegeben und es funktioniert nicht
was habe ich vergessen?
 
die db musst du ja beim ersten benutzen erstellen. dafür kannst den sqliteopenhelper verwenden
 
im grunde genommen müsste er ja sowas haben, weil auch auf dem emulator muss ja eine db eingerichtet werden .... trotzdem geh mal bitte den Hinweis von swordi nach .... Erfahrungsgemäß hat er recht :D
 
  • Danke
Reaktionen: swordi
ja die Datenbank ist ja schon erstellt und ich kann diese mit Emulator öffnen und Inhalte anzeigen lassen aber wenn ich die .apk aufs Handy installiere dann bekomme ich Fehler da wohl die Datenbankdatei nicht mitgegeben wurde
 
und wie kam die datenbank in deinen emulator ?
 
akra schrieb:
ja die Datenbank ist ja schon erstellt und ich kann diese mit Emulator öffnen und Inhalte anzeigen lassen aber wenn ich die .apk aufs Handy installiere dann bekomme ich Fehler da wohl die Datenbankdatei nicht mitgegeben wurde

ja aber du musst trotzdem ein Statement haben was deine DB erzeugt, du schnippst doch nicht mit dem Finger und sie ist da ....


schau dir bitte mal das hier an: Android SQLite Database Tutorial

EDIT: Kannst du vielleicht dein Fehler mal posten?
 
zuerst habe ich diese erstellt, herausgeholt und auf dem emulator gelöscht
dann mit Sqlitebrowser die herausgeholte Datei mit Werten gefüllt und in den emulator wieder abgelegt /data/data/"paket"/databases/
an was habe ich nicht gedacht damit ich die fertigbefüllte datenbank "mitgebe" ?
 
ok, dies höre ich im Android Umfeld zum ersten mal das man das so macht ... aber dann musst du in den ddms und dein reales Device aussuchen und es da in den richtigen Ordner packen
 
Sehr kreativ.

So wirst natürlich nicht weit kommen. Such mal bei Google mit "Android usw own database". Da findest sicher was passendes.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
  • Danke
Reaktionen: akra und Madlip
wieso "sehr kreativ"
hab gedacht bevor ich 7 Tabellen mit je 4 Spalten mit an 20 Zeilen mühsam per Code befülle, mache ich das so, bin Neuling und noch am lernen wies gemacht wird

aber danke an euch, ich werde nochmal schauen
 
danke @swordi!
bin nun gut vorrangekommen und kann Inhalte meiner Datenbank schön anzeigen
nur ich komme nicht weiter:
ich will in meinem layout sachen löschen können
ich habe in einem tabellen layout ein button und 2 textfelder als zeile wenn ich auf button drücke soll diese zeile entfernt werden
weiß jemand wie man das am besten macht? habe überlegt zumerken was gelöscht werden soll und onCreate() nochmal aufrufen ohne zulöschende elemente?
 
deine lösungsfindung ist echt immer kreativ.

niemals oncreate händisch aufrufen. das macht man nicht

na je nachdem wie du die layouts einfügst, kannst sie auch löschen. ist ja dein source code...
 
Ich hätte noch eine Frage, kann mir jemand auf die Sprünge helfen wie man die Namen der Tabellen aus einer Datenbank herausfinden kann?(die Tabellen werden während der Laufzeit erstellt und der Inhalt soll angezeigt werden)
es sollte ja so was ähnliches ergeben wie mit dem Cursor über die Zeilen der Tabellen drüber zugehen aber leider weiß ich nicht wie ich es bei Tabellen machen soll
 
Zurück
Oben Unten