PersistentObject Blackberry

时间:2011-01-31 16:15:23

标签: java blackberry java-ee persistent-object-store

如何轻松检查您的应用是否具有persistentObjects?现在我正在使用以下内容:

public boolean needsFirstTimeInit() {
    PersistentObject persistentObject = getPersistentObject(Settings.TABLE_USERS);
    Vector vector = (Vector) getVector(persistentObject);
    if(vector.size()<=0){
        return true;
    }
    return false;
}

这里的负面消息是我要求我知道必须存在的表中的数据,如果它存在,我假设表尚未初始化。有没有更好的方法呢?

3 个答案:

答案 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并将其放在哈希表中。