Получение нулевого значения от постоянного объекта

Я пытаюсь сохранить состояние регистрации пользователя в моем приложении. Я использовал постоянный магазин. Но я не получаю данные из магазина. Я написал следующий код:

package com.saiservices.util;

import java.util.Enumeration;

import com.saiservices.ui.Logger;


import net.rim.device.api.system.PersistentObject;
import net.rim.device.api.system.PersistentStore;
import net.rim.device.api.util.Persistable;

public class SaiPersistentStore implements Persistable{

    private SaiHashTable mElements = null;
    static SaiPersistentStore instance;
    private static final long KEY = xxxxxxxxxxxx;
    private PersistentObject persistentObject = null;


    /**
     * Gets the single instance of DataBase.
     * 
     * @return single instance of DataBase
     */
    public static SaiPersistentStore getInstance() {
        try {
            if (instance == null) {
                instance = new SaiPersistentStore();
            }
        } catch (Exception e) {
            instance = null;
        }
        return instance;
    }


    private SaiPersistentStore()
    {
         Logger.out("PersistentStoreInfo", "inside constructor  ");
        persistentObject = PersistentStore.getPersistentObject(KEY);
         synchronized (persistentObject) 
           { 
               if (persistentObject.getContents() == null) 
               { 
                   persistentObject.setContents(new SaiHashTable()); 
                   persistentObject.commit(); 
               }  
           }

         mElements = (SaiHashTable)persistentObject.getContents();
         if (mElements == null){
             Logger.out("PersistentStoreInfo", "************"+(mElements == null));
             mElements = new SaiHashTable();
         }
    }


    public String getElement(String key)
    {
        Logger.out("PersistentStoreInfo", "getElement :"+key);
        Logger.out("PersistentStoreInfo", "getElement value   :"+mElements.get(key));

        return (String) mElements.get(key);
    }

    public void setElement(String key, String value)
    {
        Logger.out("PersistentStoreInfo", "setElement11111 :"+key + "   "+value);
        mElements.put(key, value);
        persistentObject.setContents(mElements);
        Logger.out("PersistentStoreInfo", "setElement22222 :"+key+"   "+value);
        persistentObject.commit(); 
    }

    public Enumeration getAllKeys() 
    {
        return mElements.keys();
    }

}

И вот код хеш-таблицы:

package com.saiservices.util;

import java.util.Hashtable;

import net.rim.device.api.util.Persistable;

public class SaiHashTable extends Hashtable implements Persistable{

    public SaiHashTable(){
        super();
    }
    public SaiHashTable(int initialCepacity){
        super(initialCepacity);
    }

}

Теперь я устанавливаю элемент следующим образом:

SaiPersistentStore.getInstance().setElement("Registration","on");

Но когда я пытаюсь получить элемент таким способом, получаю нулевое значение:

 SaiPersistentStore.getInstance().getElement("Register")

Где я здесь делаю не так? Пожалуйста помоги.

1 ответ

Решение

Удалить следующую строку из setElement() метод:

    persistentObject.setContents(mElements);

делая это, вы перезаписываете содержимое перситентного объекта, который ранее был объектом SaiHashTable. Поэтому в следующий раз, когда вы попытаетесь привести содержимое постоянного объекта, вы получите исключение, которое вы перехватите, а затем сбросите экземпляр.

Также вы должны попытаться получить то же значение, которое вы установили:

SaiPersistentStore.getInstance().getElement("Registration")

Другие вопросы по тегам