2

我有一个将对象存储在持久存储中的黑莓应用程序。更新应用程序后,它应该从持久存储中读取现有值(如果有),并继续使用该值。这适用于某些设备,但不适用于其他设备。我在几台运行 OS 版本 7 的设备上进行了测试,所有这些设备都按预期工作。但是,在使用版本 5 的设备和使用版本 6 的设备上,对象在持久存储中不再可读。

即使我没有更改除版本号以外的应用程序的任何内容,情况也是如此。从持久存储中保存和加载相同的类/对象,以及用于访问它的相同对象 ID。

我正在遵循的重现此过程的过程是:

  1. 使用命令行完全删除应用程序及其所有数据。
  2. 通过从浏览器下载 .jad 文件来加载应用程序的版本,验证它是否将数据存储在持久存储中。
  3. 当应用程序在后台运行时,通过浏览器下载 .jad 文件加载更高版本。
  4. 下载高版本后,系统询问我是否要更换之前的版本,我确认我要更换。
  5. 系统加载新版本,并提示我必须重新启动才能使更改生效。我选择“重启”。
  6. 设备重新启动。更高版本正在运行,但无法从持久存储中读取对象。

我可以持续重现此问题的设备是运行 6.0 Bundle 2647 的 Blackberry 9800 (Torch)。

如上所述,这只发生在某些设备上,而不是所有设备上,这让我认为这里可能会发生编码错误以外的其他事情。

任何人都有关于这个问题的想法或如何进一步调试它?

4

1 回答 1

0

奇案。

您确定正在提交持久性存储吗?当数据已存储在存储中但未提交时,我通常会发生类似的事情。如果是这种情况,并且您加载旧版本,存储一些数据并重新启动设备,则数据将不会持久存储。

您提到当您加载更高版本时,该应用程序仍在后台运行。您可能想检查是否commit()被执行。

于 2013-03-14T06:50:01.873 回答