我正在使用 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
最佳答案
这两个对象(在 PS 中和在 RAM 中)是链接的,因此对一个对象的更改会反射(reflect)另一个对象。请参阅 Mike Kirkup 对 this thread 的回复在 BB 论坛上,具体来说:
您应该只调用 setContents() 一次。这会在您第一次添加数据时发生。对于每个后续调用,您应该调用 getContents(),然后直接修改该对象。 通过直接修改对象,您可以在工作结束时调用 commit,系统将正确提交您的更改...
此外,您可能想查看他对 key 生成的建议:)
希望这有帮助!
关于BlackBerry 持久对象/存储细微差别问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2515082/