Android db4o правильно отключить объект

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

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

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

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

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

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

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

mList.size()

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам