0

私は BlackBerry アプリを開発しており、多くの値を として保存しStringbooleanPersistent Storeます。アプリがハンドセットから削除/アンインストールされたときに、文字列とブール値が Persistent から削除されないという事実を認識しています。これらの値を削除するには、これを「プロジェクト」固有のクラスに保存する必要があることも認識しています。私はそれに苦労しているので、一時的な回避策が必要です。アプリがどの画面をロードするかを決定するために、ブール値を保存しています。

PersistentStoreHelper.persistentHashtable.put("flagged",Boolean.TRUE); 

if (PersistentStoreHelper.persistentHashtable.containsKey("flagged")) 
        {
           boolean booleanVal = ((Boolean) PersistentStoreHelper.persistentHashtable.get("flagged")).booleanValue();
           if (booleanVal==true)
           {
              pushScreen(new MyScreen());
           }
        }
        else
        {
            pushScreen(new MyScreen(false));
        }

このブール値をオブジェクトとして保存して、アプリがアンインストール/削除されたときに削除されるようにすることはできますか? 私が何かを見逃している場合は、助けてコメントしてください。

4

1 に答える 1

2

繰り返しますが、オンラインでこのバージョンPersistentStoreHelperに変更することをお勧めします。

アプリをアンインストールするときに永続ストアから値を取得BooleanしたりString削除したりできますが、それらはアプリにのみ存在できるオブジェクト内にある必要があります。

例えば:

 PersistentStoreHelper store = PersistentStoreHelper.getInstance();
 store.put("flagged", Boolean.TRUE);
 // commit will save changes to the `flagged` variable
 store.commit();

そして、後で次のように取得します。

 PersistentStoreHelper store = PersistentStoreHelper.getInstance();
 boolean isFlagged = ((Boolean)store.get("flagged")).booleanValue();

これを機能させる鍵は私のクラス内にあり、私の/あなたのアプリに固有のサブクラスPersistentStoreHelperにすべてを保存します( )。またはオブジェクトを、通常のではなく、そのアプリ固有のサブクラス内に格納する必要があります。HashtableMyAppsHashtableStringBooleanHashtablejava.util.Hashtable

繰り返しますが、これを自分で簡単にして、投稿したコードを使用してください。

注:また、おそらくこれはご存知でしょうが、アプリとその永続ストア データが完全に削除されていることを確認するには、デバイスを再起動する必要がある場合があります。

アップデート

私がオンラインに投稿PersistentStoreHelperした元のクラスを変更した場合は、そのメソッドまたはクラス内の他のメソッドにアクセスする必要があるため、次のようなコードを追加するだけでその問題を解決できます。containsKey()Hashtable

public boolean containsKey(String key) {
    return persistentHashtable.containsKey(key);
}

PeristentStoreHelperクラス に。メンバーにしないpersistentHashtableでくださいpublic staticHashtableより多くのメソッドを使用する必要があるため、上記の で示したように、それらのラッパーcontainsKey()を追加するだけです。もちろん、次のcontainsKey()コードを使用するだけで同じことを実現できます。

 boolean containsFlagged = (store.get("flagged") != null);

更新 2

消去する必要がある古い永続データに行き詰まった場合は、次のように変更PersistentStoreHelperして状況を検出および修正できます (提案については @adwiv へのハットチップ)。

   private PersistentStoreHelper() {
      persistentObject = PersistentStore.getPersistentObject(KEY);

      Object contents = persistentObject.getContents();
      if (contents instanceof MyAppsHashtable) {
         persistentHashtable = (MyAppsHashtable)contents;
      } else {
         // store might be empty, or contents could be the wrong type
         persistentHashtable = new MyAppsHashtable();
         persistentObject.setContents(persistentHashtable);
         persistentObject.commit();
      }
   }
于 2013-04-09T08:11:46.117 に答える