2016-02-02 1 views
5

Im を使用して、androidのSharedPreferenceが文字列のセットを保存します。それは私の知識に保存され、精密にretrivedしかし、アプリが再起動されると、いくつかのデータが失われた。文字列は1つずつ追加され、それらを追加する前にセットを取得し、文字列を追加してから再度格納します。設定<String>アプリが再起動された後にSharedPreferencesから復元されたときにデータが失われる

これは私がそれを格納する方法である:

Set<String> emptySet = null; 
      SharedPreferences prefs = getContext().getSharedPreferences(getContext().getString(R.string.pref_disagree_key), Activity.MODE_PRIVATE); 

      String newIdAgreed = getItem(position).getId(); 

      if (prefs.contains(getContext().getString(R.string.pref_disagree_key))) { 

       Set<String> updateSet = prefs.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet); 
       updateSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), updateSet); 
       editor.commit(); 

      } else { 
       Set<String> newSet = new HashSet<String>(); 
       newSet.add(newIdAgreed); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putStringSet(getContext().getString(R.string.pref_disagree_key), newSet); 
       editor.commit(); 
      } 

そして、これは私がそれを取り戻す方法です:

if (prefsDisagree.contains(getContext().getString(R.string.pref_disagree_key))){ 
     disagree_set = new HashSet<String>(prefsDisagree.getStringSet(getContext().getString(R.string.pref_disagree_key), emptySet)); 
     for (String item: disagree_set){ 
      //stuff done here 


     } 
} 

私はこのトピックに関するいくつかの同様の質問を見ましたが、答えのどれも私の問題を解決しません。何か案は?

答えて

4

StringSetは、保存した後に再度編集しようとすると永続的ではないため、アプリケーションを終了してもう一度開くと、追加されたばかりの新しいデータは保存されません。

それが実際に文書化されている:getStringSet

あなたが最初StringSetをコピーして挿入/コピーStringSetにデータを追加する必要があります。

Set<String> s = new HashSet<String(prefs.getStringSet(
       getContext().getString(R.string.pref_disagree_key), 
       emptySet)); 
関連する問題