2012-02-09 4 views
0

Blackberry 응용 프로그램에서 사용자가 사용할 수있는 알림 수를 추적 할 영구 및 공유 변수를 만들려고합니다. 이 번호는 홈 화면에 표시되며 장치를 끈 후에도 응용 프로그램을 직접 확인할 때까지 유지되어야합니다. 그런 다음 번호가 재설정됩니다. http://supportforums.blackberry.com/t5/Java-Development/Storing-persistent-data/ta-p/442747Java의 영구 저장소 런타임 저장소

:

import net.rim.device.api.system.RuntimeStore; 

public class IconManager { 
    private static IconManager _instance; 
    private static final long GUID = 0xab4dd61c5d004c18L; 
    private int iconCount; 

    // constructor 
    private IconManager() { 
     iconCount = 0; 
    } 

    public static IconManager getInstance() { 
     if (_instance == null) { 
      _instance = (IconManager) RuntimeStore.getRuntimeStore().get(GUID); 
      if (_instance == null) { 
       IconManager singleton = new IconManager(); 

       RuntimeStore.getRuntimeStore().put(GUID, singleton); 
       _instance = singleton; 
      } 
     } 
     return _instance; 
    } 

    public int getCount() {    
     return iconCount; 
    } 

    public void setCount(int count) {  
     iconCount = count; 
    } 
} 

내가 주로 영구 저장소 부분을 파악하려고이 사이트를 사용하고있다 : 나는 백그라운드 프로세스 아래의 UI 응용 프로그램 자체의 변수를 공유하는 싱글 톤을 사용하고있다 위의 runtimestore가 주어진 영구 저장소를 구현할 수있는 대안이 있습니까? 원래 Blackberry 예제에서 코드를 사용하려고 생각했지만이 작업을 수행하는 방법에 대해 혼란스러워합니다. 다른 스레드 사용자에서 mparizeau 쓴 다음

persistentCount = PersistentStore.getPersistentObject(0xdec6a67096f833cL); 
synchronized (persistentCount) { 
    if (persistentCount.getContents() == null) { 
     persistentCount.setContents(new StoreInfo()); 
     persistentCount.commit(); 
    } 
} 
_data = (StoreInfo)persistentCount.getContents(); 

을 당신이 그것을 업데이트하고이 같은 가질 수 PersistentStore에 저장할 때 지금이이 위에 사용 될 수 있습니다

_data.incElement(); 
synchronized(persistentCount) { 
    persistentCount.setContents(_data); 
    persistentCount.commit(); 
} 

을 어떻게 든 코드? 나는 자바와 BB 개발에 매우 ​​익숙하므로 어떤 도움을 주시면 감사하겠습니다.

+0

정확하게 필요한 항목은 무엇입니까? 명확하게 지정하십시오 .. –

답변

1

RunTimeStore를 사용하고 싶지 않습니다. 기기가 꺼진 후에도 정보를 유지하기를 원하기 때문입니다. this page

런타임 저장소가 지속되지 않습니다. BlackBerry 장치를 다시 시작하면 런타임 저장소의 데이터가 지워집니다.

는 다음과 같이 시도해보십시오.

public class IconManager { 
    private static IconManager _instance; 
    private final long GUID = 0xab4dd61c5d004c18L; 
    private PersistentObject store; 
    private int iconCount; 

    private IconManager() { 
     store = PersistentStore.getPersistentObject(GUID); 
     synchronized(store) { 
      if(store.getContents() == null) { 
       store.setContents(new Integer(0)); 
       store.commit(); 
      } 
     } 
     iconCount = ((Integer)store.getContents()).intValue(); 
    } 

    public static IconManager getInstance() { 
     if (_instance == null) { 
      _instance = new IconManager(); 
     } 
     return _instance; 
    } 

    public int getCount() {    
     return iconCount; 
    } 

    public void setCount(int count) {  
     iconCount = count; 
     synchronized(store) { 
      store.setContents(new Integer(iconCount)); 
      store.commit(); 
     } 
    } 
} 
+0

안녕하세요, 도움을 주셔서 대단히 감사합니다! 코드를 완벽하게 컴파일하지만 iconCount 선언을 static으로 변경해야만합니다. 이제 그 선언에 정적을두면 코드가 작동하지 않는데 문제가 발생했습니다. 불행히도 iconCount 변수는이 경우 저장되지 않습니다. 나는 iconCount를 정적으로 변경하여 컴파일하는 것과 관련이 있다고 생각한다. 이 문제를 해결하는 방법을 알고 있습니까? – user1152440

+0

또한 위 코드에서 싱글 톤을 어떻게 든 저장해야하지 않을까요? 싱글 톤은 두 이벤트 사이에서 변수가 동기화되도록하는 것이므로 공통 변수를 공유하는 이벤트 1과 이벤트 2 간의 관계를 파괴하지 않을 것입니다. – user1152440

+0

실제로이 경우 정적이어야합니다. 그러나 당신이 실제로 그것을 정적 일 필요가없는 싱글 톤으로 사용하고 있기 때문에 나는 깨달았다. 당신은 정적 초기화에서 물건을 생성자로 옮길 수 있어야한다. 이를 반영하도록 코드를 업데이트하겠습니다. – mparizeau

0

블랙 베리 OS의 5 ​​새로운이 SQLite는이 내장되어 당신은 그 대신에 영구 저장소로 사용할 수 있습니다. (jdbc와 비슷한 API를 가지고있다.) BBOS 5는 꽤 오래되었습니다.