首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否可以将数组或对象添加到Android上的SharedPreferences

是否可以将数组或对象添加到Android上的SharedPreferences
EN

Stack Overflow用户
提问于 2010-10-07 04:40:35
回答 11查看 119K关注 0票数 85

我有一个对象的ArrayList,它有一个名称和一个图标指针,我想把它保存在SharedPreferences中。我该怎么做呢?

备注:我不想使用数据库

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-10-07 06:03:38

所以从Data Storage上的android开发者站点

用户首选项

共享首选项并不是严格意义上的保存“用户首选项”的,比如用户选择了什么铃声。如果您对为应用程序创建用户首选项感兴趣,请参阅PreferenceActivity,它为您提供了一个创建用户首选项的活动框架,该框架将自动持久化(使用共享首选项)。

所以我认为这是可以的,因为它仅仅是持久化的键-值对。

对于最初的海报来说,这并不是那么难。您只需迭代数组列表并添加项即可。在本例中,为了简单起见,我使用了一个map,但是您可以使用一个数组列表并适当地更改它:

代码语言:javascript
运行
复制
// my list of names, icon locations
Map<String, String> nameIcons = new HashMap<String, String>();
nameIcons.put("Noel", "/location/to/noel/icon.png");
nameIcons.put("Bob", "another/location/to/bob/icon.png");
nameIcons.put("another name", "last/location/icon.png");

SharedPreferences keyValues = getContext().getSharedPreferences("name_icons_list", Context.MODE_PRIVATE);
SharedPreferences.Editor keyValuesEditor = keyValues.edit();

for (String s : nameIcons.keySet()) {
    // use the name as the key, and the icon as the value
    keyValuesEditor.putString(s, nameIcons.get(s));
}
keyValuesEditor.commit()

您可以执行类似的操作来再次读取键-值对。如果有效,请让我知道。

更新:如果您使用的是API11或更高版本,有一个method可以写出字符串集

票数 61
EN

Stack Overflow用户

发布于 2012-05-30 20:09:44

无论API级别如何,请检查String arrays and Object arrays in SharedPreferences

保存阵列

代码语言:javascript
运行
复制
public boolean saveArray(String[] array, String arrayName, Context mContext) {   
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    SharedPreferences.Editor editor = prefs.edit();  
    editor.putInt(arrayName +"_size", array.length);  
    for(int i=0;i<array.length;i++)  
        editor.putString(arrayName + "_" + i, array[i]);  
    return editor.commit();  
} 

加载数组

代码语言:javascript
运行
复制
public String[] loadArray(String arrayName, Context mContext) {  
    SharedPreferences prefs = mContext.getSharedPreferences("preferencename", 0);  
    int size = prefs.getInt(arrayName + "_size", 0);  
    String array[] = new String[size];  
    for(int i=0;i<size;i++)  
        array[i] = prefs.getString(arrayName + "_" + i, null);  
    return array;  
}  
票数 73
EN

Stack Overflow用户

发布于 2013-03-04 20:18:53

为了写作,

代码语言:javascript
运行
复制
SharedPreferences prefs = PreferenceManager
        .getDefaultSharedPreferences(this);
JSONArray jsonArray = new JSONArray();
jsonArray.put(1);
jsonArray.put(2);
Editor editor = prefs.edit();
editor.putString("key", jsonArray.toString());
System.out.println(jsonArray.toString());
editor.commit();

为了阅读,

代码语言:javascript
运行
复制
try {
    JSONArray jsonArray2 = new JSONArray(prefs.getString("key", "[]"));
    for (int i = 0; i < jsonArray2.length(); i++) {
         Log.d("your JSON Array", jsonArray2.getInt(i)+"");
    }
} catch (Exception e) {
    e.printStackTrace();
}

做同样事情的另一种方式:

代码语言:javascript
运行
复制
//Retrieve the values
Gson gson = new Gson();
String jsonText = Prefs.getString("key", null);
String[] text = gson.fromJson(jsonText, String[].class);  //EDIT: gso to gson


//Set the values
Gson gson = new Gson();
List<String> textList = new ArrayList<String>(data);
String jsonText = gson.toJson(textList);
prefsEditor.putString("key", jsonText);
prefsEditor.apply();

在Java中使用GSON:

代码语言:javascript
运行
复制
public void saveArrayList(ArrayList<String> list, String key){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    SharedPreferences.Editor editor = prefs.edit();
    Gson gson = new Gson();
    String json = gson.toJson(list);
    editor.putString(key, json);
    editor.apply();    

}

public ArrayList<String> getArrayList(String key){
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    Gson gson = new Gson();
    String json = prefs.getString(key, null);
    Type type = new TypeToken<ArrayList<String>>() {}.getType();
    return gson.fromJson(json, type);
}

在Kotlin中使用GSON

代码语言:javascript
运行
复制
fun saveArrayList(list: java.util.ArrayList<String?>?, key: String?) {
    val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
    val editor: Editor = prefs.edit()
    val gson = Gson()
    val json: String = gson.toJson(list)
    editor.putString(key, json)
    editor.apply()
}

fun getArrayList(key: String?): java.util.ArrayList<String?>? {
    val prefs: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity)
    val gson = Gson()
    val json: String = prefs.getString(key, null)
    val type: Type = object : TypeToken<java.util.ArrayList<String?>?>() {}.getType()
    return gson.fromJson(json, type)
}
票数 61
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3876680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档