-1

我已经在我的 BB 应用程序上实现了持久存储保存。

我认为我一直在以正确的方式去做。但我仍然不明白我的应用程序何时抛出 NonPersistableDataException

我在实现 Persistable 的重写 Hashtable 中保存了一组键值对。该哈希表的对象也被添加到实现 Persistable 的覆盖向量中,最后将其存储到持久存储中。

我确实通过获取覆盖的向量对象,然后从其项目中获取单个覆盖的哈希表,从持久存储中访问了此类保存的持久对象。

我认为向量和哈希表都是可持久的对象。那么,究竟是什么导致了这个异常呢?

4

1 回答 1

2

这些异常通常很难找到,尤其是当您将一个集合添加为另一个集合的“叶子”时。

请记住,不仅集合需要是 Persistable(Vector 和 Hashtable 无论如何都是),而且您添加到这些集合中的所有对象也需要是 Persistable。因此,当您将对象添加到任何持久化集合时,请寻找每个场合,您会发现问题。

祝你好运。

注意此评论:“建立 HTTP 连接时发生错误”。

据我了解(而且我不是 BBRY 员工,所以这只是经验之谈)BlackBerry PersistentStore 有时有自己的想法,最重要的是,当您或其他任何人进行提交时,它会提交所有未完成的更改。所以当你什么都不做时你可以得到这个,因为其他东西做了一个提交。现在 PersistentStore 必须是一致的,所以它会提交所有的对象,以及它们使用的所有对象,以及它们使用的所有对象,等等递归地搜索对象引用,直到它确保它有一个完整的集合。因此,例如,如果你有一个集合(比如一个 Vector)并且这个 Vector 是持久的,那么你向 Vector 添加一个不可持久的类,但是在你提交之前将其删除,你可能会侥幸逃脱。但是如果在添加和删除之间有其他东西提交,那么你会得到这个异常。

于 2013-09-11T08:15:50.713 回答