【问题标题】:ArrayList to Hashset to SharedPrefArrayList 到 Hashset 到 SharedPref
【发布时间】:2014-02-26 12:28:58
【问题描述】:

您好,我很难弄清楚如何执行此操作: 我有一个 ArrayList,它的类型是 Person,其中包括一些字段(firstName、lastName 两个字符串、生日日历)现在我需要将它转换为 HashSet 并将其保存(然后检索它)到共享首选项,但我不了解如何。 这就是我所做的:

ArrayList <Person> arrayPerson = new ArrayList<Person>();
Set <String> mySet = new HashSet<String>();
SharedPreferences sharedpref;
final static String SHARED_PREF_FILE = "listOfPersons";
sharedpref = getSharedPreferences(SHARED_PREF_FILE, Context.MODE_PRIVATE);


onCreate() {
    SaveData();
    // This is supposed to be shown on a TextView
    getData(myStringSet);
}

void SaveData() {
    Editor editor = sharedpref.edit();
    editor.putStringSet("myStringSet", mySet);
    editor.commit();

}

Set<String> getData(String key) {
    return sharedpref.getStringSet(key, mySet);
}

【问题讨论】:

  • 您的 Set&lt;String&gt; 是否持有来自单个 Person 对象的值?
  • 虽然这不能解决您的问题,但我建议使用 SQLite,而不是通过 SharedPreferences 将其写入磁盘。
  • 我知道 SQLite 会是更好的选择,但我还没到那里

标签: java android hash arraylist sharedpreferences


【解决方案1】:

在您的代码中,我看到您使用 String 作为您的集合的类型。在这种情况下,我认为您可以提出某种将 Person 对象转换为 String 的方法,并在将元素添加到集合时,确保调用该方法将 Person 解析为 String。您必须确保将 Person 解析为 String 的方法不会为 2 个不同的 Person 生成相同的字符串。当然,您应该创建一个接受 String 并从中创建 Person 对象的方法。这个解释假设集合中的每个字符串都是一个人。使用循环将所有人员添加到集合中。

for (Person p : arrayPerson) {
   mySet.add(p.convertToString());
}

如果您从配置文件中读取字符串并希望从集合中创建人员的 ArrayList,则可以使用以下代码,其中 Person.parseString() 是解析字符串并创建人员对象的静态方法以此为基础。

    arrayPerson = new ArrayList<Person>(mySet.size());
    for (String person : mySet) {
        arrayPerson.add(Person.parseString(person));
    }

【讨论】:

  • 您将如何将该方法调用到 Set 中?假设我在 Person 类中重写了 toString 方法,现在怎么办?你能提供一些代码吗?我是 Java/Android 的完全初学者。
  • 我已经用将 ArrayList 转换为集合的代码更新了响应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2018-11-12
  • 2012-11-17
  • 1970-01-01
  • 2012-04-29
  • 2016-03-06
相关资源
最近更新 更多