Проблема постоянного хранения BlackBerry, - PullRequest
1 голос
/ 16 августа 2010

Мне нужно хранить несколько промо в постоянном хранилище.Вот класс:

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

public class FavoritePromo implements Persistable{
    public static String id;
    public static String merchantName;
    public static String title;
    public static String expireDate;
    public static String couponsLeft;

    public FavoritePromo(String id, String merchantName, String title, String expireDate, String couponsLeft){
        this.id = id;
        this.merchantName = merchantName;
        this.title = title;
        this.expireDate = expireDate;
        this.couponsLeft = couponsLeft;
    }

}

И вот как я помещаю его в постоянное хранилище:

private static final long PERSISTANCE_KEY_2 = 0xb13951b27c2c948aL;
    public static Vector favoritTable = new Vector();
    private static PersistentObject persistentObject2 = PersistentStore.getPersistentObject(PERSISTANCE_KEY_2);

    public static void addToFavorites(FavoritePromo promo){

        synchronized (persistentObject2) {
            favoritTable.addElement(promo);
            persistentObject2.setContents(favoritTable);
            persistentObject2.commit();
        }   
    }

    public static void loadFavorites(){
        PersistentObject persistentObject2 = PersistentStore.getPersistentObject(PERSISTANCE_KEY_2);
        synchronized (persistentObject2) {
            favoritTable = (Vector) persistentObject2.getContents();
            System.out.println("UserData: Retrieve from RMS success");
        }
    }

    public static void deleteFavorites(){
        PersistentStore.destroyPersistentObject(PERSISTANCE_KEY_2);
    }

    public static boolean isFavorite(String _id){
        FavoritePromo tmp;
        for (int x = 0; x < favoritTable.size(); x++){
            tmp = (FavoritePromo) favoritTable.elementAt(x);
            if (tmp.id.equals(_id)) {
                return true;
            }
        }
        return false;
    }

Мои две проблемы:

  1. Только первое промо на самом деле хранится в постоянном хранилище.Остальные точно такие же.

  2. Когда приложение закрывается и запускается снова, данные исчезают.Хм ... разве это не должно быть постоянным?

1 Ответ

3 голосов
/ 16 августа 2010

Все ваши свойства статичны, они не должны быть.

Вы должны использовать общедоступные методы получения и установки для доступа к вашим данным в экземпляре класса.

Вы, вероятно, должны прочитать учебник по Класс

import java.util.Vector;

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

public class PersistantStoreController {

    private static final long PERSISTANCE_KEY_2 = 0xb13951b27c2c948aL;

    private Vector favoritTable = new Vector();

    public void addToFavorites(FavoritePromo promo) {
        synchronized (persistentObject2) {
            if (favoritTable == null) {
                favoritTable = new Vector();
            }
            favoritTable.addElement(promo);
            persistentObject2.setContents(favoritTable);
            persistentObject2.commit();
        }
    }

    private PersistentObject persistentObject2 = PersistentStore
            .getPersistentObject(PERSISTANCE_KEY_2);

    public Vector getFavoriteTable() {
        return favoritTable;
    }

    public void loadFavorites() {
        PersistentObject persistentObject2 = PersistentStore
                .getPersistentObject(PERSISTANCE_KEY_2);
        synchronized (persistentObject2) {
            favoritTable = (Vector) persistentObject2.getContents();
            System.out.println("UserData: Retrieve from RMS success");
        }
    }

    public void deleteFavorites() {
        PersistentStore.destroyPersistentObject(PERSISTANCE_KEY_2);
    }

    public boolean isFavorite(String _id) {
        FavoritePromo tmp;
        for (int x = 0; x < favoritTable.size(); x++) {
            tmp = (FavoritePromo) favoritTable.elementAt(x);
            if (tmp.getId().equals(_id)) {
                return true;
            }
        }
        return false;
    }
}



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

public class FavoritePromo implements Persistable {
    private String id;
    private String merchantName;
    private String title;
    private String expireDate;
    private String couponsLeft;

    public FavoritePromo(String id, String merchantName, String title,
            String expireDate, String couponsLeft) {
        this.id = id;
        this.merchantName = merchantName;
        this.title = title;
        this.expireDate = expireDate;
        this.couponsLeft = couponsLeft;
    }

    public String getId() {
        return id;
    }
}
...