【问题标题】:BlackBerry persistent object /storage nuance question黑莓持久对象/存储细微差别问题
【发布时间】:2010-03-25 11:42:16
【问题描述】:

我正在使用 PS 在我的应用中存储数据。我想我对 PS 的工作原理有误解。如果有人能告诉我如何做到这一点,以便我从 PS 检索到的账单是未加密的,而不是我最终得到的加密账单?注意:我原来存储和未加密的账单!

据我所知,它认为两个账单和两个 PO 对象都是同一个对象!当我在 Eclispe 中查看它们的内存位置时,bill 和两个 PO 对象都具有相同的内存位置!我错过了什么?

谢谢!

    //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

【问题讨论】:

    标签: blackberry object-persistence persistent-storage


    【解决方案1】:

    这两个对象(在 PS 和 RAM 中)是链接的,因此更改为一个会反映另一个。请参阅 Mike Kirkup 在 BB 论坛上对 this thread 的回复,具体如下:

    你应该只调用一次 setContents()。这将在您第一次添加数据时发生。对于每个后续调用,您应该调用 getContents(),然后直接修改该对象。 通过直接修改对象,您将在工作结束时调用 commit,系统将正确提交您的更改...

    另外,您可能想查看他对密钥生成的建议 :)

    希望这会有所帮助!

    【讨论】:

    • 好吧,如果您想要一个持久的未加密对象和一个 RAM 加密对象,我认为您需要克隆该对象(或创建两个对象)。我不知道你想做什么,所以我很难给出一个样本......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多