2011-01-31 40 views
1

如何輕鬆檢查應用程序是否具有persistentObjects?現在,我使用了以下內容:PersistentObject Blackberry

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

這裏的缺點是,我從表中請求數據我知道,有存在,如果存在的話我想表尚未初始化。有沒有更好的方法來做到這一點?

回答

0

以下解決方案爲我工作最好的:

持久性對象被視爲一個表,並含有載體(填充物)。

我用tableNames的所有hashcode做了一個向量。 (v1) 我做了一個哈希表(hashcode tablename,PersistentObject); (h1) 在每次啓動時,我檢查v1中的所有哈希碼是否在h2中有一個值(persistentObject)。 如果不是,我初始化persistentObject並將其放入散列表。

1

您顯示的代碼不太正確。 PersistentStore BlackBerry API文檔中有一個簡單示例,向您顯示您需要執行的操作。

基本上,你可以調用getContents()來獲得你從商店中撈出的PersistentObject。如果它爲空,則不存儲任何內容,並且需要使用setContents()將其初始化爲某些內容。

+0

是的,但你仍然需要指定一個表名。沒有說'如果沒有persistentObjects存在'的方式? – Vincent 2011-02-01 13:28:56

+0

不確定你的意思是「表名」,這不是關係型數據庫。持久對象使用唯一鍵標識。如果你想知道一個持久化對象是否存在,那就沒有API了。你只能得到持久化對象(如果它不存在就會創建它)或銷燬它們。 – 2011-02-01 14:12:58

0

特定的持久對象與特定的應用程序沒有關聯,因此談論應用程序的持久對象是沒有意義的。

任何知道您用來獲取PersistentObject的GUID的應用程序都可以將同一個GUID傳遞給PersistentStore.getPersistentObject以獲取相同的對象。這意味着您用於PersistentStore.getPersistentObject的GUID在BlackBerry上的所有應用程序中應該是唯一的(實際上很難保證這一點)。因此,如果您使用給定的GUID並獲取內容爲非null的持久對象,則可能是因爲您的應用已將其保存(很可能,鑑於兩個應用使用相同的64位GUID的可能性很小),或者可能是其他一些應用程序保存了一個具有相同GUID的對象。

在實踐中,大多數應用程序不會打擾任何形式的檢查,他們收回給定GUID的預期對象,並且不會導致問題。但是有一點需要注意,那就是因爲GUID碰撞而出現一個奇怪的錯誤。