PersistentObject Blackberry - PullRequest
       5

PersistentObject Blackberry

1 голос
/ 31 января 2011

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

public boolean needsFirstTimeInit() {
    PersistentObject persistentObject = getPersistentObject(Settings.TABLE_USERS);
    Vector vector = (Vector) getVector(persistentObject);
    if(vector.size()<=0){
        return true;
    }
    return false;
}

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

Ответы [ 3 ]

1 голос
/ 31 января 2011

Код, который вы показали, не совсем правильный. В документации по API BlackBerry PersistentStore показан простой пример того, что вам нужно сделать.

Обычно вы вызываете getContents () для объекта PersistentObject, который вы выловили из магазина. Если он нулевой, ничего не сохраняется, и вам нужно инициализировать его чем-либо, используя setContents ().

0 голосов
/ 29 марта 2011

Для меня лучше всего подойдет следующее решение:

PersistentObject рассматривается как таблица и содержит вектор (заполненный объектами).

Я создал вектор со всеми хэш-кодами таблицы имен.(v1) я создал хеш-таблицу (имя таблицы хеш-кодов, PersistentObject);(h1) При каждом запуске я проверяю, все ли хэш-коды в v1 имеют значение (persistentObject) в h2.Если нет, я инициализирую persistentObject и помещаю его в хеш-таблицу.

0 голосов
/ 01 февраля 2011

Определенный постоянный объект не связан с конкретным приложением, поэтому нет смысла говорить о постоянных объектах вашего приложения.

Любое приложение, которое знает GUID, который вы использовали для получения PersistentObject, может передать тот же GUID в PersistentStore.getPersistentObject, чтобы вернуть тот же объект. Это означает, что GUID, который вы используете для PersistentStore.getPersistentObject, должен быть уникальным для всех приложений на BlackBerry (на практике это трудно гарантировать). Поэтому, если вы используете заданный GUID и получаете постоянный объект с содержимым, отличным от null, возможно, ваше приложение его сохранило (скорее всего, учитывая небольшую вероятность того, что два приложения используют один и тот же 64-разрядный GUID) возможно, что какое-то другое приложение сохранило объект с таким же GUID.

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

...