2012-02-08 11 views
0

私は現在、自分のアプリケーションに2つのエントリポイント間の変数を共有するためのコードを持っています。変数は、ユーザーがアイコンの横に、ホーム画面上に表示されているどのように多くの注意を示すために使用iconCount変数です。私がこれを行う方法は、シングルトンを使用しており、現時点で正常に動作するようです。問題は、私は完全にオフにして、携帯電話の電源を入れたときに、私はそれらの通知がゼロにリセットしたくないということになりました。 7つの通知がある場合は、デバイスを再起動しても7つの通知が必要です。このために私はしばらくの間研究してきた永続的な店舗統合が必要であるようです。ブラックベリーJavaでPersisentストアの開発

これまでのところ、裸のシングルトンのための私のコードは次のとおりです。

public class MyAppIndicator{ 
    public ApplicationIndicator _indicator; 
    public static MyAppIndicator _instance; 

    MyAppIndicator() { 
     setupIndicator(); 
    } 

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

    public void setupIndicator() { 

     //Setup notification 
     if (_indicator == null) { 
      ApplicationIndicatorRegistry reg = ApplicationIndicatorRegistry.getInstance(); 
      _indicator = reg.getApplicationIndicator(); 

      if(_indicator == null) { 
       ApplicationIcon icon = new ApplicationIcon(EncodedImage.getEncodedImageResource ("notificationsdemo_jde.png")); 
       _indicator = reg.register(icon, false, true); 
       _indicator.setValue(0); 
       _indicator.setVisible(false); 
      } 
     } 
    } 

    public void setVisible1(boolean visible, int count) { 

     if (_indicator != null) { 
      if (visible) { 
       _indicator.setVisible(true); 
       _indicator.setValue(count); //UserInterface.incrementCount() 
      } else { 
       _indicator.setVisible(false); 
      } 
     } 
    } 
} 

私は永続ストレージを実装する方法を見つけ出すためにブラックベリーのチュートリアルを使用している:http://supportforums.blackberry.com/t5/Java-Development/Storing-persistent-data/ta-p/442747

今、私は先に進む前に、私は私のコーディングは完全に間違っているかもしれないので、私はJavaの開発に非常に新しいです強調するが、ここで私が何をしようとしたものです必要があります。

public void setVisible1(boolean visible, int count) { 

    if (_indicator != null) { 
     if (visible) { 
      _indicator.setVisible(true); 
      _indicator.setValue(count); //UserInterface.incrementCount() 
      StoreInfo info = new StoreInfo(); 
      info.incElement(); 

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


     } else { 
      _indicator.setVisible(false); 
     } 
    } 
} 

static { 
    persistentCount = PersistentStore.getPersistentObject(0xdec6a67096f833cL); 
    synchronized (persistentCount) { 
     if (persistentCount.getContents() == null) { 
      persistentCount.setContents(new Vector()); //don't know what to do with this? 
      persistentCount.commit(); 
     } 
    } 
} 

private static final class StoreInfo implements Persistable{ 
    private int iconCount; 
    public StoreInfo(){} 

    public int getElement(){ 
     return (int)iconCount; 
    } 

    public void incElement(){ 
     iconCount++;    //persistently increment icon variable 
    } 

    public void resetElement(){ 
      iconCount=0;    //when user checks application 
    } 
} 

コードabov永続的な部分を実装するのに問題があるため、私は何とか期待しています。誰かがこれを達成するためのアイデアやインプットを持っているなら、助けてください。もちろん事前に感謝します。

答えて

0

この例では、StoreInfoクラスを保持する_dataという変数があります。まず、StoreInfoを変数に入れておく必要があります。これを行うには、あなたの静的初期化子で、次のようなものしている:あなたが行っていると仮定すると、

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

:あなたはそれを更新し、PersistentStoreに保存したいとき

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

は今、あなたのようなものを持つことができますStoreInfoの1つのインスタンスを持っている、あなたがPersistentStoreに新しい値を保存することを忘れないように修飾方法にコミットコードを配置した方が良いかもしれません。

+0

お返事ありがとうございます、私は今あなたの例を少し参考にしています。私はちょうど変数を示しており、必ずしも値を設定して対処してきたクラスを実現したので、私は進展せずに時間のカップルのためにこれをしてきました。私はこれを別のクラスであると考えて別の質問を開くのが適切だろうと思いますか?しかし、助けてくれてありがとう、それは多くをクリアする! – user1152440

関連する問題