Как использовать хранилище постоянных объектов в Blackberry?

Я хочу создать простое приложение CRUD, чтобы проверить возможности обработки данных Blackberry.

Как мне создать простую функцию сохранения?

1 ответ

Решение

В этом примере я храню вектор в постоянном хранилище.

Вы должны придумать идентификатор магазина, который должен иметь тип long. Я обычно создаю это, объединяя полностью определенное имя класса приложения с некоторой строкой, которая делает его уникальным в моем приложении.

//class Fields...
//Use the application fully qualified name so that you don't have store collisions. 
static String ApplicaitonID = Application.getApplication().getClass().getName();

static String STORE_NAME    = "myTestStore_V1";
long storeId = StringUtilities.stringHashToLong( ApplicationID + STORE_NAME );
private static PersistentObject myStoredObject; 
private static ContentProtectedVector myObjects;
//End class fields.

Пример загрузки вектора из магазина:

myStoredObject = PersistentStore.getPersistentObject( storeId ); 
myObjects = (ContentProtectedVector) myStoredObject.getContents();
//Print the number of objects in storeage:
System.out.println( myObjects.size() );

//Insert an element and update the store on "disk"...
myObjects.addElement( "New String" );
myStoredObject.setContents(myObjects);
myStoredObject.commit();

Пример инициализации этого магазина и сохранения его на диск в первый раз:

myStoredObject = PersistentStore.getPersistentObject( storeId ); 
myObjects = (ContentProtectedVector) myStoredObject.getContents();
if(myObjects == null)
    myObjects = new ContentProtectedVector(); 
myStoredObject.setContents(myObjects);
myStoredObject.commit();

Если вы хотите зафиксировать изменения (или сохранить изменения на диске), вам нужно повторить две нижние строки. setContents(OBJ); и совершить ().

Вы можете хранить следующее, не делая ничего особенного:

java.lang.Boolean 
java.lang.Byte 
java.lang.Character 
java.lang.Integer 
java.lang.Long 
java.lang.Object 
java.lang.Short 
java.lang.String 
java.util.Vector 
java.util.Hashtable 

@see: http://docs.blackberry.com/en/developers/deliverables/17952/Storing_objects_persistently_1219782_11.jsp

Чтобы хранить ваши собственные классы, они (и все подклассы) должны реализовывать интерфейс "Persistable". Я рекомендую вам сделать это, так как эти магазины очищаются автоматически при удалении вашего приложения. Это связано с тем, что ОС очищает сохраненные объекты, когда "любое" имя класса, на которое ссылаются в хранилище, больше не имеет приложения, связанного с ним. Так что, если ваш магазин использует только строки, он никогда не будет очищен.

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