【问题标题】:Storing Array List Object in SharedPreferences在 SharedPreferences 中存储数组列表对象
【发布时间】:2014-05-23 23:05:57
【问题描述】:

此方法将新对象添加到ArrayList

//get text from textview
time = date.getText().toString();
entry_d = entry.getText().toString();
dayName = day.getText().toString();

arrayList.add( new ArrayObject( dayName, entry_d ,time));

我正在尝试将这 3 个字符串添加到 SharedPrefrences 中。这是我的代码:

private void savePreferences(String key, String value) {

    SharedPreferences sharedPreferences = PreferenceManager             
                                     .getDefaultSharedPreferences(this);
    Editor editor = sharedPreferences.edit();
    editor.putBoolean(key, value);
    editor.commit();
}

此方法一次只添加一个字符串,而我想一次添加 3 个字符串。有什么方法我可以实现。

【问题讨论】:

    标签: android sharedpreferences


    【解决方案1】:

    使用 Gson 库将您的数组或对象转换为 Json,并将您的数据存储为 json 格式的字符串。

    保存;

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
    Editor editor = sharedPrefs.edit();
    Gson gson = new Gson();
    
    String json = gson.toJson(arrayList);
    
    editor.putString(TAG, json);
    editor.commit();
    

    阅读;

    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(context);
    Gson gson = new Gson();
    String json = sharedPrefs.getString(TAG, "");
    Type type = new TypeToken<List<ArrayObject>>() {}.getType();
    List<ArrayObject> arrayList = gson.fromJson(json, type);
    

    【讨论】:

    • 要导入哪些类型类 - stackoverflow.com/questions/20847997/…
    • 使用 import java.lang.reflect.Type;
    • 如果arrayList是List怎么办?
    • 不要持久化框架对象或任何复杂的对象,如视图。
    【解决方案2】:

    使用共享首选项存储 Arraylist

    SharedPreferences prefs=this.getSharedPreferences("yourPrefsKey",Context.MODE_PRIVATE);
    Editor edit=prefs.edit();
    
    Set<String> set = new HashSet<String>();
    set.addAll(your Arraylist Name);
    edit.putStringSet("yourKey", set);
    edit.commit();
    

    从共享首选项中检索 Arraylist

    Set<String> set = prefs.getStringSet("yourKey", null);
    List<String> sample=new ArrayList<String>(set);
    

    【讨论】:

    • 我们可以使用单个集合添加超过 1 个数组列表...我有 3 个字符串数组列表。我可以使用单个集合或 3 个集合用于 3 个列表
    • @Prabs 你创建了单独的集合/?
    • @AnshulTyagi 这个集合概念不符合我的要求。所以我没有实现这个概念。为了测试,是的,我创建了单独的集合。
    • 对不起。它只支持 Set 不支持其他。
    • 仅适用于 Set :\ !
    【解决方案3】:

    不要为此使用Hashset。它将改变Arraylist 的顺序。请改用Gson。 如果您想使用Hashset,则必须进行序列化和反序列化,这将占用资源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2012-02-01
      • 2011-09-30
      • 2021-08-27
      • 2023-03-11
      • 1970-01-01
      相关资源
      最近更新 更多