хранение данных в постоянном хранилище - PullRequest
0 голосов
/ 12 марта 2012

У меня возникла проблема с хранением данных в постоянном хранилище, я пытаюсь сохранить события на разные даты в постоянном хранилище, но данные переопределяются следующим кодом:

public ListEventScreen(Vector v,String timezone) { 
    for(int i=0;i<v.size();i++){
        EventBean bean=(EventBean)v.elementAt(i);
        //a normal label in the app, just to display text, anchored left
        LabelField label = new LabelField(bean.getSummary(),LabelField.FIELD_LEFT);
        //add the label to the screen
        add(label);   
        saveUserInfo(v);
    } 
}

public void saveUserInfo(Vector vectorData){
    // static{
        store = PersistentStore.getPersistentObject( 0x1dfc10ec9447eb14L );
        synchronized(store) {
            store.setContents(vectorData); 
            store.commit();
        }
    //}
}

Пожалуйста, дайте мне знатьчто должно быть изменено.

1 Ответ

1 голос
/ 13 марта 2012

Каждый раз, когда вы звоните store.setContents(), текущее содержимое persistentStore перезаписывается передаваемым Vector. Необходимо убедиться, что вы загружаете предыдущие события, которые уже были в persistentStoreв ваш Vector перед добавлением новых событий в тот Vector, который вы затем сохраняете.

Вы также вызываете saveUserInfo() на каждой итерации вашего цикла в ListEventScreen().Вместо этого вы должны вызывать его вне цикла.

Я бы сделал что-то вроде этого:

public ListEventScreen(Vector v,String timezone) { 
    Enumeration e = v.elements();;
    while (e.hasMoreElements()){
        EventBean bean = (EventBean) e.nextElement();
        //a normal label in the app, just to display text, anchored left
        LabelField label = new LabelField(bean.getSummary(),LabelField.FIELD_LEFT);
        //add the label to the screen
        add(label);   
    } 
}

public void loadUserInfo(Vector vectorData){
    // static{
        store = PersistentStore.getPersistentObject( 0x1dfc10ec9447eb14L );
        synchronized(store) {
            Vector v = (Vector) store.getContents(); 
            Enumeration e = v.elements();
            while (e.hasMoreElemens){
                vectorData.add(e.nextElement());
            }
        }
    //}
}

public void saveUserInfo(Vector vectorData){
    // static{
        store = PersistentStore.getPersistentObject( 0x1dfc10ec9447eb14L );
        synchronized(store) {
            store.setContents(vectorData); 
            store.commit();
        }
    //}
}

.

{
    Vector v = new Vector();
    loadUserInfo(v);
    ListEventScreen(v, ...);
    ... modify v contents as needed ...
    saveUserInfo(v);
}

Если вы не против изменитьформат содержимого вашего постоянного хранилища, я бы вместо этого поместил хранилище в одноэлементный класс:

public class EventBeans extends Vector implements Persistable
{   
    private static final long persistKey = 0x1dfc10ec9447eb14L;

    private static EventBeans _instance = null;
    private static PersistentObject _persist = null;

    static{
        _persist = PersistentStore.getPersistentObject(persistKey);
        _instance = (EventBeans) _persist.getContents();
        if (_instance == null){
            _instance = new EventBeans();
            _persist.setContents(_instance);
            _persist.commit();
        }
    }

    private EventBeans(){       
        super();
    }

    public static EventBeans getInstance(){
        return _instance;
    }

    public static synchronized void save(){
        _persist.commit();
    }
}

.

{
    Vector v = EventBeans.getInstance();
    ListEventScreen(v, ...);
    ... modify v contents as needed ...
    EventBeans.save();
}
...