首次安装App时,我有一个BlackBerry应用程序启动(App load)并带有Registration屏幕。之后,应用程序将加载主屏幕。注册屏幕仅在首次加载时出现。我通过在boolean
中存储PersistentStore
值来实现此目的。如果该值存在,则不会显示“注册”屏幕。
PersistentStoreHelper.persistentHashtable.put("flagged",Boolean.TRUE);
PersistentStoreHelper.persistentObject.commit();
UiApplication.getUiApplication().pushScreen(new MyScreen());
我知道为了在删除/卸载App时删除Persistent Store,我必须使Hashtable成为我自己的子类,因此我在单独的类中声明了Hashtable:
public class PersistentStoreHelper extends Hashtable implements Persistable{
public static PersistentObject persistentObject;
public static final long KEY = 0x9df9f961bc6d6daL;
public static Hashtable persistentHashtable;
}
然而,这没有帮助,并且boolean
的{{1}}值未被清除PersistentStore
。请指教。
编辑:当我将上述 PersistentStoreHelper 类更改为
时public static PersistentObject persistentObject =
PersistentStore.getPersistentObject(KEY);
并删除
PersistentStoreHelper.persistentObject =
PersistentStore.getPersistentObject(PersistentStoreHelper.KEY);
从保存boolean
值的B类,我发现每次关闭App时都会删除boolean
值。这不应该发生,只有在删除/卸载应用程序时才应删除该值。有什么指针吗?
答案 0 :(得分:1)
其工作方式是BlackBerry OS查看您在PersistentStore
中存储的对象。如果它识别出这些对象只能由您的应用程序使用,那么它会在您卸载应用程序时将其删除。但是,如果存储对象的类是其他应用程序使用的类,那么您的数据将不被删除。
您已经声明了这样的助手类:
public class PersistentStoreHelper extends Hashtable implements Persistable{
但是帮助程序类不是存储的。您的帮助程序类只是一个帮助程序,它可以为您存储其他内容。在你的情况下,它存储这个:
public static Hashtable persistentHashtable;
但是,该对象的类型为java.util.Hashtable
,这是许多应用程序使用的类。因此,卸载应用时不会删除它。你应该做的是这样的事情:
public class PersistentStoreHelper implements Persistable { // so inner class = Persistable
public static PersistentObject persistentObject;
public static final long KEY = 0x9df9f961bc6d6daL;
/**
* persistentHashtable is now an instance of a class that
* only exists in your app
*/
public static MyAppsHashtable persistentHashtable;
private class MyAppsHashtable extends Hashtable implements Persistable {
// don't need anything else ... the declaration does it all!
}
}
我在这里看不到它,但我假设你有这个代码:
persistentObject = PersistentStore.getPersistentObject(KEY);
然后当你想将数据保存回商店时,你正在做这样的事情;
persistentHashtable.put("SomeKey", someNewData);
persistentObject.setContents(persistentHashtable);
persistentObject.commit();
仅向persistentHashtable
添加数据不会(永久)保存。希望你已经在某个地方拥有了这个部分。
注意:如果您进行了这些更改,下次运行应用时,请不要指望这行代码能够正常运行:
persistentHashtable = (MyAppsHashtable)persistentObject.getContents();
因为您的代码的最后一个版本没有使用MyAppsHashtable
类,因此加载的数据将不属于该类型。这是第一次做到这一点很重要的一个原因。一般情况下,我总是最终保存PersistentStore
中包含在Hashtable
子类中的Persistable
数据,该实现if (PersistentStoreHelper.persistentObject.getContents() == null) {
PersistentStoreHelper.persistentHashtable = new MyAppsHashtable();
PersistentStoreHelper.persistentObject.setContents(PersistentStoreHelper.persistentHashtable);
} else {
PersistentStoreHelper.persistentHashtable =
(MyAppsHashtable)PersistentStoreHelper.persistentObject.getContents();
}
。我可能稍后改变其中的内容,但我永远不会更改该顶级存储对象的签名。希望你还没有发布你的应用程序。
更新:回复您的评论/问题:
{{1}}