Получение нулевого значения от постоянного объекта
Я пытаюсь сохранить состояние регистрации пользователя в моем приложении. Я использовал постоянный магазин. Но я не получаю данные из магазина. Я написал следующий код:
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")