2014-02-26 72 views
0

嗨我正在越來越難搞清楚如何做到這一點: 我有一個ArrayList,它的類型是Person,它包括一些字段(firstName,lastName兩個字符串,birthdate日曆)現在我需要將其轉換爲HashSet並將其保存(然後檢索它)到共享首選項,但我不明白如何。 這是我做了什麼:ArrayList to Hashset to SharedPref

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

您的'Set '是否擁有單個'Person'對象的值? –

+0

儘管這不是解決您的問題的方法,但我會建議使用SQLite,而不是通過SharedPreferences將其寫入磁盤。 – Leandros

+0

我知道SQLite將是一個更好的選擇,但我還沒有達到那裏 – user3355760

回答

0

在你的代碼,我看你使用String作爲一個類型的集合。在這種情況下,我認爲你可以想出一些將Person對象轉換爲String的方法,並在將元素添加到集合時確保調用該方法來將Person解析爲String。您必須確保將Person解析爲字符串的方法不會爲2個不同的人員生成相同的字符串。當然,你應該創建一個接受String並從中創建Person對象的方法。這個解釋假定Set中的每個String都是一個Person。使用循環將所有人添加到集合中。

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

如果讀取配置文件中的字符串,並希望從該組創建者的一個ArrayList,您可以使用下面的代碼,其中Person.parseString()是一個把字符串的靜態方法基於它創建一個Person對象。

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

,你會如何調用該方法的設置?說我重寫Person類中的toString方法,現在是什麼?你能提供一些代碼嗎?我是Java/Android的完整初學者。 – user3355760

+0

我更新了將ArrayList轉換爲集合的代碼。 – Slimu

+0

工作,謝謝! – user3355760