Android db4o правильно отключить объект - PullRequest
0 голосов
/ 14 января 2011

способ, которым я использую db4o, действительно только для чтения.Я буду упаковывать БД с приложением и время от времени делать некоторые фоновые обновления, которые я могу обрабатывать по-разному.Но для моих действий, которые отображают данные из БД, мне не нужно делать никаких обновлений, поэтому по этой причине я просто хотел бы получить данные из БД и сделать так, чтобы эти данные были «деактивированы», поэтому, когда действие имеетИзменение конфигурации из-за изменения ориентации экрана или чего-то еще, я могу быстро разметить упражнение снова.Как правильно деактивировать объекты, чтобы они все еще могли использоваться в моей деятельности?В настоящее время у меня есть код что-то вроде

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

Я пытался сделать что-то вроде этого

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

, но это не похоже на работу. Мне нужно перебирать каждый элемент спискадеактивировать это?

когда вы меняете ориентацию экрана на андроиде, он попадает в мой метод закрытия активности, где я закрываю базу данных.но затем начинает снова, и я не хочу снова заполнять список.

, поэтому я продолжаю получать исключение "com.db4o.ext.DatabaseClosedException", потому что в моем макете действия я делаю что-то вроде

mList.size()

Я действительно просто хочу деактивировать объекты, которые у b / ci никогда не былочтобы обновить их, как я могу это сделать?

1 Ответ

4 голосов
/ 14 января 2011

Ну, во-первых, вы хотите убедиться, что все объекты загружены.db4o возвращает только ленивый список загрузки, который загружает объекты при доступе к ним.Вам нужно скопировать ваши объекты в обычный список, который не требует работающей базы данных.Это довольно просто, просто передайте результат запроса в новый список массивов:

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

Теперь вы не должны получать исключение DatabaseClosedException.

Тогда я просто хочу добавить, что«деактивация» в db4o - это нечто совершенно другое.Это связано с механизмом активации .Деактивация является противоположностью активации.Активация загружает объект из базы данных в память.Деактивация превращает объект в памяти в пустой корпус без данных в нем.Явная деактивация полезна только для особых сценариев безопасной памяти.

...