2012-05-12 1 views
2

Мне интересно, сохраняются ли данные, сохраненные в PersistentObject\PersistentStore, после обновления версии приложения.Сохраняет ли данные PersistentStore PersistentObject после обновления приложения от AppWorld

Мой случай использования:

1) применение Publishing с версии 0.1. Пользователи сохраняют данные в PersistentObject \ PersistentStore

2) Публикация приложения с версией 0.2.

Будут ли доступны данные, сохраненные в PersistentStore \ PersistentObject версии 0.1, для приложения с версией 0.2?

ответ

2

Да, он по-прежнему будет доступен до тех пор, пока сохраняющиеся классы не имеют структурных изменений. Это означает, что вы не можете добавлять или удалять поля между версиями, если вы хотите, чтобы постоянные данные оставались.

+0

Спасибо за ответ. Я хотел бы обобщить полученные знания: если я сохраню данные в PersistentStore как Object во время обновления версии приложения, данные будут очищены. Но если я сериализую Object to String и сохраняю объект как строку в PersistentStore, эта строка не будет очищена, и обновленная версия приложения сможет читать и анализировать данные. Это решение имеет недостаток: если приложение удаляется, данные из PersistentStore будут выведены на устройства, данные не будут удалены во время удаления. Также не очень хорошо. – Nazar

+0

Если, я собираюсь изменить во всех файлах приложение, что произойдет? Будет ли постоянным быть там или будет очищено для приложения? – AnkitRox

1

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

Это позволяет вам гибкость в будущем, не имея проблем с базовым форматом изменения постоянных классов, as Michael warned about. Ваши данные будут всегда быть в постоянном Hashtable.

Если вы хотите, чтобы убедиться, что постоянные данные удаляются, когда ваше приложение будет удалено, а затем использовать хеш контейнер, уникальные для пакета вашего приложения:

package com.mycompany.myapp; 

import net.rim.device.api.util.Persistable; 
import java.util.Hashtable; 

public class Preferences extends Hashtable implements Persistable { 

Экземпляра этого Preferences класса, например, это то, что вы перейдете к PersistentObject#setContents().

Если вы не хотите хотите удалить постоянные данные, просто используйте стандартный java.util.Hashtable как контейнер для всех ваших данных.

Смежные вопросы