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 - это нечто совершенно другое. Это связано с активационным механизмом. Деактивация является противоположностью активации. Активация загружает объект из базы данных в память. Деактивация превращает объект в памяти в пустой корпус без данных в нем. Явная деактивация полезна только для особых сценариев безопасной памяти.