2017-03-20 31 views
0

環境設定で同じ値を2回使用してリストを作成しようとしていますが、読み返してみると1つの結果しか得られません。 はここに私のSharedPreferencesコードです:私はそれはのように2つの連続した行のリストに書いていますSharedPreferencesがデータを上書きしないようにする

public void storeDeviceDetails(final ArrayList<String> deviceDetails) { 
     SharedPreferences.Editor editor = context.getSharedPreferences("devicePrefs",Context.MODE_PRIVATE).edit(); 

     Set<String> set = new LinkedHashSet<>(); 
     set.addAll(deviceDetails); 
     editor.putStringSet("deviceDetails", set); 
     editor.apply(); 
    } 

    public ArrayList<String> retrieveDeviceDetails() { 
     SharedPreferences prefs = context.getSharedPreferences("devicePrefs", MODE_PRIVATE); 
     ArrayList<String> details = null; 

     Set<String> set = prefs.getStringSet("deviceDetails", null); 

     if (set != null) { 
      details = new ArrayList<>(set); 
     } 

     return details; 
    } 

から[hero2lte, 7.0, hero2ltexx, SM-G935F, samsung]

- 次の行になりまし

MyPrefClass.storeDeviceDetails(myList); 
MyPrefClass.storeDeviceDetails(myList); 

そして、私はMyPrefClass.retrieveDeviceDetails();を行い、私は唯一のようにそれを得ます

+1

本当に[mcve]を提供します。あなたのコードの一部を置く代わりに。 – GhostCat

+0

リストにセットを渡していて、セットに重複した値が入っていません – giorashc

+0

[重複した値を同じキーで2つ以上格納できますか?androidのSharedPreferences?](http://stackoverflow.com/questions/13623098)/can-i-store-two-or-more-values-with-same-key-using-sharedpreferences-android) –

答えて

1
Set<String> set = new LinkedHashSet<>(); 

新しいセットを作成しているので、古いセットを完全に上書きしています。

既に存在する場合はSharedPreferencesにあるセットを取得し、存在しない場合は新しいセットのみを作成してください。このようなもの:

Set<String> set = prefs.getStringSet("deviceDetails", null); 

if (set == null) { 
    set = new LinkedHashSet<>(); 
} 

また、同じ要素を2回追加しています。修正する場合でも、Setは一意性を保証しているので、一度だけ追加することができます。

+0

実際には、共有リストに配列リストを保存しようとしています。これどうやってするの ? – MagdHo0506

+0

セットの代わりに配列リストを作成します。 – Cruncher

+2

@Cruncher SharedPreferencesはリストを保存しません。必要があれば、別のストレージメカニズムを使用する必要があります。セットが十分であれば、あなたの答えが働きます。 –

関連する問題