给定运行时存储的Java持久存储

时间:2012-02-09 18:00:18

标签: java stored-procedures blackberry singleton persistence

我正在尝试创建一个持久且共享的变量,该变量将跟踪Blackberry应用程序中用户可用的通知数量。此号码显示在主屏幕上,即使设备关闭后也应该保留,直到他们自己检查应用程序,然后重置号码。我一直在使用单例来共享后台进程和UI应用程序本身之间的变量:

import net.rim.device.api.system.RuntimeStore;

public class IconManager {
    private static IconManager _instance;
    private static final long GUID = 0xab4dd61c5d004c18L;
    private int iconCount;

    // constructor
    private IconManager() {
        iconCount = 0;
    }

    public static IconManager getInstance() {
        if (_instance == null) {
            _instance = (IconManager) RuntimeStore.getRuntimeStore().get(GUID);
            if (_instance == null) {
                IconManager singleton = new IconManager();

                RuntimeStore.getRuntimeStore().put(GUID, singleton); 
                _instance = singleton;
            }
        }
        return _instance;
    }

    public int getCount() {             
        return iconCount;
    }

    public void setCount(int count) {      
        iconCount = count;
    }
}

我一直主要使用此网站试图找出持久存储部分:http://supportforums.blackberry.com/t5/Java-Development/Storing-persistent-data/ta-p/442747

在给定上述runtimestore的情况下,是否有替代实现持久性存储?我原本打算使用Blackberry示例中的代码,但我对如何执行此操作感到困惑。来自另一个线程的用户 mparizeau 写了以下内容:

persistentCount = PersistentStore.getPersistentObject(0xdec6a67096f833cL); 
synchronized (persistentCount) { 
    if (persistentCount.getContents() == null) { 
        persistentCount.setContents(new StoreInfo());
        persistentCount.commit(); 
    } 
}  
_data = (StoreInfo)persistentCount.getContents();

现在,当您想要更新它并保存到PersistentStore时,您可以使用以下内容:

_data.incElement();
synchronized(persistentCount) {
    persistentCount.setContents(_data);
    persistentCount.commit();
}

这可以用上面的代码吗?我是java和BB开发的新手,所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

我认为您不想使用RunTimeStore,因为您希望即使在设备关闭后信息仍然存在。来自this page

  

运行时存储不是持久的。重新启动BlackBerry时   设备,运行时存储中的数据清除。

尝试这样的事情:

public class IconManager {
    private static IconManager _instance;
    private final long GUID = 0xab4dd61c5d004c18L;
    private PersistentObject store;
    private int iconCount;

    private IconManager() {
        store = PersistentStore.getPersistentObject(GUID);
        synchronized(store) {
            if(store.getContents() == null) {
                store.setContents(new Integer(0));
                store.commit();
            }
        }
        iconCount = ((Integer)store.getContents()).intValue();
    }

    public static IconManager getInstance() {
        if (_instance == null) {
            _instance = new IconManager();
        }
        return _instance;
    }

    public int getCount() {             
        return iconCount;
    }

    public void setCount(int count) {      
        iconCount = count;
        synchronized(store) {
            store.setContents(new Integer(iconCount));
            store.commit();
        }
    }
}

答案 1 :(得分:0)

Blackberry OS的5和更新版本内置了SQLite。您可以使用它而不是持久存储。 (它有一个类似jdbc的API)。 BBOS 5已经出现了很长一段时间。