Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 持久存储将布尔值另存为对象_Object_Blackberry_Persistent_Persistent Storage - Fatal编程技术网

Object 持久存储将布尔值另存为对象

Object 持久存储将布尔值另存为对象,object,blackberry,persistent,persistent-storage,Object,Blackberry,Persistent,Persistent Storage,我正在开发一个BlackBerry应用程序,并将大量值作为String和boolean保存到持久存储。我知道,当从手机上删除/卸载应用程序时,字符串和布尔值不会从Persistent中删除。我还知道,为了删除这些值,我需要将其存储在“项目”特定的类中。我一直在努力解决这一问题,因此希望有一个临时的解决方案。我正在保存一个布尔值,以确定应用程序应加载哪个屏幕 PersistentStoreHelper.persistentHashtable.put("flagged",Boolean.TRUE);

我正在开发一个BlackBerry应用程序,并将大量值作为
String
boolean
保存到
持久存储
。我知道,当从手机上删除/卸载应用程序时,字符串和布尔值不会从Persistent中删除。我还知道,为了删除这些值,我需要将其存储在“项目”特定的类中。我一直在努力解决这一问题,因此希望有一个临时的解决方案。我正在保存一个布尔值,以确定应用程序应加载哪个屏幕

PersistentStoreHelper.persistentHashtable.put("flagged",Boolean.TRUE); 

if (PersistentStoreHelper.persistentHashtable.containsKey("flagged")) 
        {
           boolean booleanVal = ((Boolean) PersistentStoreHelper.persistentHashtable.get("flagged")).booleanValue();
           if (booleanVal==true)
           {
              pushScreen(new MyScreen());
           }
        }
        else
        {
            pushScreen(new MyScreen(false));
        }

是否可以将此布尔值存储为对象,以便在卸载/删除应用程序时将其删除。如果我遗漏了什么,请提供帮助和评论。

再次建议您将
PersistentStoreHelper
更改为

卸载应用程序时,您当然可以从持久性存储中删除
布尔值
字符串
值,但它们必须位于只能存在于应用程序中的对象内

例如:

persistentstoreheloper-store=persistentstoreheloper.getInstance();
store.put(“标记”,Boolean.TRUE);
//提交将保存对'flagged'变量的更改
store.commit();
然后稍后使用以下命令检索:

persistentstoreheloper-store=persistentstoreheloper.getInstance();
boolean isFlagged=((boolean)store.get(“flagged”).booleanValue();
这项工作的关键是在我的
persistentstoreheloper
类中,它将所有内容保存在我/你的应用程序(
MyAppsHashtable
)特有的
哈希表的子类中。您需要将
字符串
布尔
对象存储在该应用程序唯一的
哈希表
子类中,在普通的
java.util.Hashtable

同样,请让这对你自己容易,并使用我张贴的代码

注意:另外,您可能知道这一点,但您可能需要重新启动设备才能看到应用程序及其持久存储数据被完全删除

更新 如果您更改了原始的
persistentstoreheloper
类,因为您希望访问
containsKey()
方法或
Hashtable
类中的其他方法,则只需添加如下代码即可解决此问题:

public boolean containsKey(字符串键){
返回persistenthastable.containsKey(键);
}
PeristentStoreHelper
请不要将
persistentHashtable
a
public static
成员设置为
。由于您需要使用更多的
Hashtable
方法,只需为它们添加包装器,就像我上面用
containsKey()
显示的那样。当然,只需使用以下代码即可实现与containsKey()相同的功能:

boolean containsFlagged=(store.get(“flagged”)!=null);
更新2 如果遇到需要清理的旧持久性数据,您可以修改
persistentstoreheloper
来检测和纠正这种情况,如下所示(hattip至@adwiv以获取建议):

private persistentstoreheloper(){
persistentObject=PersistentStore.getPersistentObject(键);
对象内容=persistentObject.getContents();
if(MyAppsHashtable的内容实例){
persistenthastable=(MyAppsHashtable)内容;
}否则{
//存储可能为空,或者内容可能是错误的类型
persistentHashtable=新的MyAppsHashtable();
persistentObject.setContents(persistenthastable);
persistentObject.commit();
}
}

谢谢您提供详细信息。请注意,当应用程序在模拟器上运行时(但不会删除持久数据),它无法加载到我的设备上。我已经在设备上调试了代码,错误被抛出到
persistentstoreheloper store=persistentstoreheloper.getInstance()
给了我
未捕获的异常:java.lang.ClassCastException
@Sarah,这可能是我警告过你的(两次)。如果您使用旧代码运行应用程序,它将数据存储为
哈希表
。然后,如果将代码更改为what I,则
getInstance()
方法将把数据强制转换为
MyAppsHashtable
。那是行不通的。在更改代码之前,您必须删除应用程序存储的旧数据。我已将
reset()
方法添加到。您可以使用它一次清除任何设备/模拟器上的旧数据。是的,我知道您之前向我提到过这一点,因此我删除了旧应用程序,并通过拔出电池重置了设备。然而,这可能并没有清除存储为哈希表的数据。很抱歉,我真的不明白如何
reset()
。我无法在我的主类中调用此方法,因为
getInstance()
对我不起作用。你能告诉我怎么复位吗?
@Sarah,没错。如果您只是删除了应用程序,并拔下了电池,它将不会删除旧的持久数据。这实际上就是这种存储的好处。它就在附近。由于旧数据存储在
java.util.Hashtable
中,因此设备永远不会删除它。请参阅上面的更新2。我决定最好只修改
persistentstoreheloper
构造函数,检测这个问题,并自动重置持久存储。因此,您不需要调用
reset()
。只要用我上面发布的构造函数替换你的构造函数就行了。谢谢。修改了构造函数并删除了
reset()
的最终版本已经发布。