PersistentObject Blackberry
Как вы можете легко проверить, есть ли в вашем приложении постоянные объекты? Прямо сейчас я использую следующее:
public boolean needsFirstTimeInit() {
PersistentObject persistentObject = getPersistentObject(Settings.TABLE_USERS);
Vector vector = (Vector) getVector(persistentObject);
if(vector.size()<=0){
return true;
}
return false;
}
Отрицательным моментом является то, что я запрашиваю данные из таблицы, которая, как я знаю, должна существовать, и если она существует, я предполагаю, что таблицы не были инициализированы. Есть ли лучший способ сделать это?
3 ответа
Следующее решение работает лучше всего для меня:
PersistentObject рассматривается как таблица и содержит вектор (заполненный объектами).
Я сделал вектор со всеми хеш-кодами таблицы Names. (v1) я создал хеш-таблицу (имя таблицы хеш-кодов, PersistentObject); (h1) При каждом запуске я проверяю, все ли хэш-коды в v1 имеют значение (persistentObject) в h2. Если нет, я инициализирую persistentObject и помещаю его в хеш-таблицу.
Код, который вы показали, не совсем правильный. В документах API PersistentStore BlackBerry API есть простой пример, показывающий, что вам нужно сделать.
По сути, вы вызываете getContents() для объекта PersistentObject, который вы нашли в магазине. Если он нулевой, ничего не сохраняется, и вам нужно инициализировать его чем-нибудь, используя setContents().
Определенный постоянный объект не связан с конкретным приложением, поэтому нет смысла говорить о постоянных объектах вашего приложения.
Любое приложение, которое знает GUID, который вы использовали, чтобы получить PersistentObject
может передать тот же GUID PersistentStore.getPersistentObject
чтобы вернуть тот же объект. Это означает GUID, который вы используете для PersistentStore.getPersistentObject
должен быть уникальным для всех приложений на BlackBerry (на практике это трудно гарантировать). Так что, если вы используете заданный GUID и возвращаете постоянный объект сnull
содержимого, это может быть связано с тем, что ваше приложение сохранило его (скорее всего, учитывая малую вероятность того, что два приложения используют один и тот же 64-битный GUID), или может быть, что какое-то другое приложение сохранило объект с тем же GUID.
На практике большинство приложений не заботятся о какой-либо проверке того, что они вернули ожидаемый объект для данного идентификатора GUID, и это не вызывает проблем. Но об этом следует знать в одном случае, когда вы получаете странную ошибку из-за коллизии GUID.