2010-08-16 3 views
1

영구 저장 장치에 여러 개의 프로모션을 저장해야합니다. 여기에 클래스의 :BlackBerry 영구 저장 장치 문제,

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. 앱을 닫고 다시 실행하면 데이터가 사라집니다. 흠 .. 끈기가 있어야하지 않니?

답변

3

귀하의 속성은 모두 정적입니다.

클래스 인스턴스의 데이터에 액세스하려면 public getter 및 setter를 사용해야합니다.

당신은 아마 Class

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; 
    } 
} 
+0

개인 정적 벡터 favoritTable = 새로운 벡터()에 튜토리얼을 읽어야; 이제 프로모션이 올바르게 추가되었습니다. 에뮬레이터가 다시 시작되고 프로모션이 사라지면 나는 그것이 지속적이어야한다고 생각 했단 말인가? – anta40

+0

@ anta40, 내 편이면, 그들은 여전히 ​​거기에 있습니다. –