Blackberry应用程序版本更新删除某些设备上的永久存储对象

Blackberry应用程序版本更新删除某些设备上的永久存储对象,blackberry,persistent-storage,Blackberry,Persistent Storage,我有一个Blackberry应用程序,它在持久存储中存储一个对象。更新应用程序后,它应该从持久存储中读取现有值(如果有),并继续使用该值。这在某些设备上有效,但在其他设备上不起作用。我在几个运行操作系统版本7的设备上进行了测试,所有这些设备都按预期工作。但是,在使用版本5的设备和另一个使用版本6的设备上,对象在持久存储中不再可读 即使除了版本号之外,我没有对应用程序进行任何更改,情况也是如此。从持久存储中保存和加载的完全相同的类/对象,以及用于访问它的相同对象ID 我遵循的复制过程是: 使用命令

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

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

我遵循的复制过程是:

  • 使用命令行完全删除应用程序及其所有数据
  • 通过从浏览器下载.jad文件加载应用程序版本,验证其是否将数据存储在永久存储中
  • 当应用程序在后台运行时,通过浏览器下载.jad文件加载更高版本
  • 下载较新版本后,系统询问我是否要替换以前的版本,我确认我要替换
  • 系统将加载新版本,并提示我必须重新启动才能使更改生效。我选择“重新启动”
  • 设备重新启动。较新版本正在运行,但无法从持久存储中读取对象
  • 我可以始终如一地重现这个问题的设备是运行6.0 Bundle 2647的Blackberry 9800(Torch)

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

    有人对这个问题有什么想法或者如何进一步调试它吗?

    特殊情况

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


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

    感谢您对阿披舍克的出色思考。我通过添加旧版本的重新启动来检查这一点,并确保在重新启动后,在安装新版本之前,它仍然可以读取存储的数据。不幸的是,新版本仍然无法读取该值,因此我怀疑安装过程中的某些内容会清除该值。