BlackBerry постоянный объект / вопрос хранения нюансов - PullRequest
2 голосов
/ 25 марта 2010

Я использую PS для хранения данных в моем приложении. Я думаю, что у меня неправильное понимание того, как работает PS. Если бы кто-нибудь мог сказать мне, как сделать так, чтобы счет, который я получаю от PS, был незашифрованным, в отличие от зашифрованного счета, которым я заканчивал? Примечание: я изначально храню и незашифрованный счет!

Из того, что я могу сказать, он считает, что оба счета и оба объекта PO являются одинаковыми объектами! Когда я смотрю на их ячейки памяти в Eclispe, то и Билл, и оба объекта ПО имеют одинаковые ячейки памяти! Чего мне не хватает?

Спасибо!

    //create an unencrypted bill
    BillDAO testBill = new BillDAO();

    //store it in PS
    PersistentObject po = PersistentStore.getPersistentObject(4);
    po.setContents(testBill);
    po.forceCommit();

    //encrypt the bill
    testBill.encrypt();

    //retrieve it from PS using a different PO
    PersistentObject po2 = PersistentStore.getPersistentObject(4);
    BillDAO retrievedBill = (BillDAO) po2.getContents();

    //and now for some reason my retrieved bill is encrypted!
    //it should be unencrypted

1 Ответ

3 голосов
/ 25 марта 2010

Два объекта (в PS и в ОЗУ) связаны, поэтому изменения одного отражаются на другом. См. Ответ Майка Киркупа на эту тему на форуме BB и в частности:

Вы должны когда-либо вызывать setContents () только один раз. Это произойдет в самый первый раз, когда вы добавляете данные. Для каждого последующего вызова вы должны вызывать getContents () и затем , изменяя этот объект напрямую. Изменяя объект напрямую, вы вызываете commit в конце вашей работы, где система будет правильно фиксировать ваши изменения ...

Кроме того, вы можете ознакомиться с его рекомендациями по генерации ключей:)

Надеюсь, это поможет!

...