Разработка постоянного магазина на Blackberry Java - PullRequest
0 голосов
/ 08 февраля 2012

В настоящее время у меня есть код для разделения переменной между двумя точками входа в моем приложении.Переменная - это переменная iconCount, используемая для указания количества уведомлений пользователя, которое отображается на домашнем экране рядом со значком.Мне удалось сделать это с помощью синглтона, и в данный момент он (кажется) работает нормально.Проблема в том, что я не хочу, чтобы эти уведомления сбрасывались в ноль, когда я полностью выключаю и включаю телефон.Если должно быть 7 уведомлений, я хочу, чтобы было 7 уведомлений даже после перезагрузки устройства.Для этого мне, очевидно, нужна постоянная интеграция магазина, которую я изучал некоторое время.

Пока мой код для чистого синглтона:

public class MyAppIndicator{
    public ApplicationIndicator _indicator; 
    public static MyAppIndicator _instance; 

    MyAppIndicator () {
        setupIndicator();   
    }

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

    public void setupIndicator() {

        //Setup notification 
        if (_indicator == null) {
            ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance();
            _indicator = reg.getApplicationIndicator();

            if(_indicator == null) {
                ApplicationIcon icon = new ApplicationIcon(EncodedImage.getEncodedImageResource ("notificationsdemo_jde.png"));
                _indicator = reg.register(icon, false, true);  
                _indicator.setValue(0);
                _indicator.setVisible(false);
            }
        }
    }

    public void setVisible1(boolean visible, int count) {

        if (_indicator != null) {
            if (visible) {
                _indicator.setVisible(true);
                _indicator.setValue(count); //UserInterface.incrementCount()
            } else {
                _indicator.setVisible(false);
            }
        }
    }
}

Я использовал учебник по Blackberry, чтобы выяснить, как реализовать постоянное хранилище: http://supportforums.blackberry.com/t5/Java-Development/Storing-persistent-data/ta-p/442747

Теперь, прежде чем идти дальше, я должен подчеркнуть, что я очень плохо знаком с Java-разработкой, поэтому мое кодирование может быть совершенно неверным, но вот что я пытался сделать:

public void setVisible1(boolean visible, int count) {

    if (_indicator != null) {
        if (visible) {
            _indicator.setVisible(true);
            _indicator.setValue(count); //UserInterface.incrementCount()
            StoreInfo info = new StoreInfo(); 
            info.incElement();

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


        } else {
            _indicator.setVisible(false);
        }
    }
}

static { 
    persistentCount = PersistentStore.getPersistentObject(0xdec6a67096f833cL); 
    synchronized (persistentCount) { 
        if (persistentCount.getContents() == null) { 
            persistentCount.setContents(new Vector()); //don't know what to do with this?
            persistentCount.commit(); 
        } 
    } 
} 

private static final class StoreInfo implements Persistable{
    private int iconCount;
    public StoreInfo(){}

    public int getElement(){
        return (int)iconCount;
    }

    public void incElement(){
        iconCount++;             //persistently increment icon variable
    }

    public void resetElement(){
            iconCount=0;             //when user checks application
    }
}   

Код выше нене работа, которую я бы ожидал как-то, потому что у меня проблемы с реализацией постоянной части.Если у кого-то есть идеи или предложения о том, как этого добиться, любая помощь будет полезна.И конечно спасибо заранее.

1 Ответ

0 голосов
/ 09 февраля 2012

В примере у них есть переменная с именем _data, которая содержит класс StoreInfo, поэтому в первую очередь вы должны сохранить StoreInfo в некоторой переменной. Для этого в статическом инициализаторе должно быть что-то вроде следующего:

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();
}

Предполагая, что у вас когда-либо будет только один экземпляр StoreInfo, было бы лучше поместить код коммита в методы модификатора, чтобы не забыть сохранить новые значения в PersistentStore.

...