SharedPreference中的Android列表

时间:2016-07-11 12:39:15

标签: java android

我正在尝试在SharedPreferences中编辑List中的值,但是有些错误。

我的SharedPreference是:

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>();
}

我使用SharedPref:

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

如果我想编辑或从VALUE_KEY获取值,一切都可以通过:

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()”的东西的最佳方法是什么?如何从这个List和大小中获取值?

3 个答案:

答案 0 :(得分:4)

如果要在SharedPreference中存储List对象,请使用gson库。 它将用于将列表对象转换为json格式并将该json字符串存储到sharedPref中 首先在gradle文件(app level)中包含这一行

  

编译com.google.code.gson:gson:2.4&#39;

下面的代码是将Type设置为List

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 :(得分:1)

以下内容:

全局声明myList

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

设置值:

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

获得价值:

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

注意: - totalSize是数组的大小

答案 2 :(得分:1)

为什么使用list?(包含重复元素)
 从共享偏好中获取所有元素

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();

如果你必须使用列表检查这个链接也     https://gist.github.com/cr5315/6200903