2016-07-11 10 views
2

SharedPreferencesのListから値を編集しようとしていますが、sometingが間違っています。SharedPreferenceのAndroidリスト

マイSharedPreferenceがある:私はでSharedPrefを使用

public class StepsData { 
    static SharedPreferences data; 
    static SharedPreferences.Editor editor; 
    static final int VALUE_KEY = 0; 
    static final List<String> LIST_KEY= new Vector<String>(); 
} 

:私はVALUE_KEYのすべての値を編集したり、取得したい場合

StepsData.data = getApplicationContext().getSharedPreferences("userData", MODE_PRIVATE); 
StepsData.editor = StepsData.data.edit(); 

はで動作します。

int step = StepsData.data.getInt(String.valueOf(VALUE_KEY), 0); 
editor.putInt(String.valueOf(VALUE_KEY), 0).apply(); 

けどListを使用する際に問題があります。値を取得するためのコードは次のとおりです。

List<String> myList = (List<String>) data.getStringSet(String.valueOf(LIST_KEY),null); 

や削除のために:

List<String> clearList = new Vector<String>(); 
editor.putStringSet(String.valueOf(LIST_KEY), (Set<String>) clearList).apply(); 

が、NullPointerExceptionがあります。 SharedPreferenceからのListに ".clear()"のようなものを使用する最良の方法は何ですか?また、このリストとサイズから値を取得する方法はありますか?

+2

コードにはいくつか問題があります。まず、 'LIST_KEY'は' List'ではなく 'String'である必要があります。第二に、共有設定は 'Set 'を 'List 'ではなく受け付けます。しかし、 'Set'を使って' List'をインスタンス化することもできますし、その逆も可能です。 'リスト stringList =新しいArrayList <>(yourStringSet); stringSet =新しいTreeSet <>(yourStringList) 'を設定します。リストに重複が含まれている場合は、ユニークに減らすことができます。 –

答えて

4

リストオブジェクトをSharedPreferenceに保存してからgsonライブラリを使用する場合は、 リストオブジェクトをjson形式に変換し、そのjson文字列をsharedPrefに格納するために使用します。
まず

のGradleファイルにコンパイル 'com.google.code.gsonを:gson:2.4'(アプリケーションレベル)この行が含まれるコードの下

を一覧表示するタイプを設定することです
Type listType = new TypeToken<List<String>>(){}.getType(); 

Gson gson = new Gson(); 

今リストオブジェクトを作成し、gsonオブジェクトを使用してJSON文字列形式に変換して入力し

List<String> myList = new ArrayList<>(); 
//add elements in myList object 

String jsonFormat = gson.toJson(myList,listType); 
//adding to sharedPref 
editor.put("list",jsonFormat).apply(); 

ここでsharedPrefから値を取得し、json文字列をListオブジェクトに戻します。

//this line will get the json string from sharedPref and will converted into object of type list(specified in listType object) 
List<String> list = gson.fromJson(sharedPref.get("list",""),listType); 
//now modify the list object as par your requirement and again do the same step of converting that list object into jsonFormat. 
1

以下:グローバル

宣言myList:値を取得するための

for (int i = 0; i < totalSize; i++) { 
    PreferenceManager.getDefaultSharedPreferences(this) 
        .edit() 
        .putString("number" + i, value + "").commit();   
} 

:値を設定する

ArrayList<String> myList = new ArrayList<String>(); 

for (int i = 0; i < totalSize; i++) { 
    myList.add(PreferenceManager.getDefaultSharedPreferences(this) 
           .getString("number" + i, "0")); 
} 

注: - ?totalSizeはこれをチェックリストを使用する必要がある場合sharedpreference

Set<String> set = preference.getStringSet("key", null); 

//Set the values 
Set<String> set = new HashSet<String>(); 
set.addAll(listOfExistingScores); 
preferenceEditor.putStringSet("key", set); 
preferenceEditor.commit(); 

からすべての要素を取得し、あなたの配列

+0

要素でない要素にすべてのリストを追加するのはどうですか? –

+0

私はこの方法を使用しており、それは私のために働いています........... – sushildlh

1

なぜあなたが使用しないリストのサイズ(これは、重複要素が含まれています)
ですリンク https://gist.github.com/cr5315/6200903

+0

もう1つの質問があります。なぜ私はdata.getInt(String.valueOf(SOME_INT_KEY)、0);を使用する必要があります。ちょうどdata.getInt(SOME_INT_KEY、0)のinsted。共有設定がstaticの場合final final SOME_INT_KEY?すべての例では2番目のバージョンですが、エラーがあり、String.valueofを置く必要があります – barmi

+1

共有設定キーが整数ではなく文字列として格納されている場合は、https://developer.android.com/training/basics/data-storageを確認してください/shared-preferences.html#WriteSharedPreference –

関連する問題