【问题标题】:store array list in shared preferences with the type of an object将数组列表存储在具有对象类型的共享首选项中
【发布时间】:2015-01-14 21:39:03
【问题描述】:

我有一个list_beneficiaries 的数组列表(类型:受益人)。在那个数组列表中,我有像 Beneficiary 对象类型的元素。像这样的,

list_beneficiaries.add(new Beneficiary(Integer.parseInt(obj2.getString("id")),
                       obj2.getString("ben_firstname"), obj2.getString("ben_lastname"));

我想在共享首选项中添加这个数组列表并检索它。我怎样才能做到这一点? 我试过这个 stackoverflow 答案:Save ArrayList to SharedPreferences

但是,我没有得到我想要的结果。因为我有一个数组类型的对象。

【问题讨论】:

  • @Selvin :我已经在我的问题中提到了该链接..
  • @Selvin:你知道吗?如果你不想帮助别人,或者你什么都不知道,那么你应该离开这里。我已经在我的问题中提到I tried 那些答案。我需要更多解释。
  • @Selvin :虽然我没有要求你翻译我的评论。我有吗?
  • 无论如何(让我们埋头苦干),一个提示......列表的SP是一个糟糕的选择,一旦你修改了一个对象,你必须再次序列化整个数组并将其保存到SP......尝试使用 SQLite 代替,特别是如果您认为/假设/确定数组中的元素不止几个...

标签: java android arrays


【解决方案1】:

我真的很喜欢 Gson。使用方便:

  1. Download the jar 并保存到app/libs/

  2. 更新 gradle 依赖项(build.gradle):

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.google.code.gson:gson:2.3'
    }
    
  3. 更新您的代码:

    ArrayList<MyClass> array = new ArrayList<>();
    
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor editor = prefs.edit();
    
    // Put
    Gson gson = new Gson();
    String json = gson.toJson(array);
    editor.putString("preference_key", json);
    editor.commit(); //every change in editor object is commited.
    // Get
    json = prefs.getString("preference_key", null);
    java.lang.reflect.Type type = new TypeToken<ArrayList<MyClass>>(){}.getType();
    array = gson.fromJson(json, type);
    

【讨论】:

  • Gson 解决方案第二名。自己用过,效果很好。
  • PREF_MEM_SEARCH 是什么?
  • 共享首选项文件的名称
【解决方案2】:

用这个代替ArrayList&lt;String&gt; use List&lt;YourObjectClass&gt; or ArrayList&lt;YourObjectClass&gt;

  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();     // This line is IMPORTANT !!!
}

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

【讨论】:

    猜你喜欢
    • 2015-09-03
    • 1970-01-01
    • 2018-08-09
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2016-08-24
    相关资源
    最近更新 更多