2011-01-13 9 views
0

die Art, wie ich db4o verwende, ist wirklich nur schreibgeschützt. Ich werde eine DB mit der Anwendung verpacken und hin und wieder ein paar Hintergrund-Updates machen, die ich anders handhaben kann. Aber für meine Aktivitäten, die Daten von der db anzeigen, muss ich keine Updates machen, aus diesem Grund möchte ich nur Daten aus der db herausholen und diese Daten "deaktiviert" haben, also wenn die Aktivität hat Eine Konfigurationsänderung aufgrund der Änderung der Bildschirmausrichtung oder etwas, ich kann die Aktivität schnell neu gestalten. Was ist der richtige Weg, um Objekte zu deaktivieren, damit sie für meine Aktivitäten noch verwendbar sind? Zur Zeit habe ich Code so etwas wieandroid db4o Objekt ordnungsgemäß deaktivieren

List<MyObject> mList = db().queryByExample(persistentClass); // db just gets my ObjectContainer 

Ich habe versucht, so etwas wie diese

db().ext().deactivate(mList); 

zu tun, aber es ist nicht zu work.Do scheint ich durch jedes Element der Liste iterieren muß sie deaktivieren?

Wenn Sie die Bildschirmausrichtung auf dem Android ändern, trifft es meine Aktivität close-Methode, wo ich die Datenbank schließe. Aber dann fange ich wieder an, und ich möchte den mList nicht wieder auffüllen.

so habe ich immer eine „com.db4o.ext.DatabaseClosedException“ Ausnahme bekommen, weil in meinem Layout der Tätigkeit i Dinge wie

mList.size() 

ich wirklich will nur die Objekte b/ci deaktivieren sie nie aktualisieren müssen, wie kann ich mache das?

Antwort

4

Zuerst müssen Sie sicherstellen, dass alle Objekte geladen sind. db4o gibt nur eine Liste mit verzögerten Ladungen zurück, die beim Zugriff auf das Objekt geladen wird. Sie müssen Ihre Objekte in eine reguläre Liste kopieren, für die keine laufende Datenbank erforderlich ist. Das ist ganz einfach, geben Sie einfach das Ergebnis der Abfrage auf eine neue Array-Liste:

List<MyObject> mList = new ArrayList<MyObject>(db().queryByExample(persistentClass)); 

Jetzt sollten Sie keine DatabaseClosedException bekommen.

Dann möchte ich nur hinzufügen, dass die "Deaktivierung" in db4o etwas völlig anderes ist. Es hat mit dem Activation -Mechanismus zu tun. Deaktivierung ist das Gegenteil von Aktivierung. Die Aktivierung lädt ein Objekt aus der Datenbank in den Speicher. Die Deaktivierung macht das Objekt im Speicher zu einem leeren Rumpf ohne Daten darin. Die explizite Deaktivierung ist nur für spezielle Szenarien zum Speichern von Speicher sinnvoll.

+0

ah, schön zu wissen, ich hatte Deaktivierung falsch verstanden, danke für die Klärung. – slim