如何轻松检查您的应用是否具有persistentObjects?现在我正在使用以下内容:
public boolean needsFirstTimeInit() {
PersistentObject persistentObject = getPersistentObject(Settings.TABLE_USERS);
Vector vector = (Vector) getVector(persistentObject);
if(vector.size()<=0){
return true;
}
return false;
}
这里的负面消息是我要求我知道必须存在的表中的数据,如果它存在,我假设表尚未初始化。有没有更好的方法呢?
答案 0 :(得分:1)
您展示的代码不太对劲。 PersistentStore BlackBerry API文档中有一个简单示例,向您展示了您需要做的事情。
基本上你在你从商店里捞出的PersistentObject上调用了getContents()。如果它为null,则没有任何存储,您需要使用setContents()将其初始化为某些内容。
答案 1 :(得分:0)
特定的持久对象与特定的应用程序没有关联,因此讨论应用程序的持久对象没有意义。
任何知道您用来获取PersistentObject
的GUID的应用都可以将相同的GUID传递给PersistentStore.getPersistentObject
以获取相同的对象。这意味着您用于PersistentStore.getPersistentObject
的GUID在BlackBerry上的所有应用程序中应该是唯一的(实际上很难保证这一点)。因此,如果您使用给定的GUID并获取具有非null
内容的持久对象,则可能是您的应用已保存它(最有可能的是,两个应用程序使用相同的64位GUID的可能性很小) )或者可能是某个其他应用程序保存了具有相同GUID的对象。
在实践中,大多数应用程序都不会为任何类型的检查而烦恼,因为它们返回了给定GUID的预期对象,并且不会导致问题。但是有一点需要注意的是,由于GUID冲突,你会遇到一个奇怪的错误。
答案 2 :(得分:0)
以下解决方案最适合我:
PersistentObject被视为一个表,包含一个Vector(用对象填充)。
我使用tableNames的所有哈希码创建了一个向量。 (V1) 我做了一个哈希表(hashcode tablename,PersistentObject); (H1) 在每次启动时,我都会检查v1中的所有哈希码是否在h2中都有值(persistentObject)。 如果没有,我初始化persistentObject并将其放在哈希表中。