我有ArrayList
Calendar
类型,我需要将其数据保存到SharedPreferences
。
我可以使用以下代码保存String
ArrayList
数据:
Set<String> setName = new HashSet<String>();
setName.addAll(ignoredProcesses);
SharedPreferences shrdPref = getSharedPreferences("sharePref", MODE_PRIVATE);
SharedPreferences.Editor prefEditor = shardPref.edit();
prefEditor.putStringSet("keyValue", setName);
prefEditor.commit();
但是,如果我按照相同的方法保存Calendar
数据,我将Set
类型更改为String
时出错。
如何将ArrayList <Calendar> list = new ArrayList<Calendar>();
保存到SharedPreferences
以及如何从SharedPrefernces
取回{{1}}。
非常感谢您的帮助。谢谢
答案 0 :(得分:6)
您必须使用方法Calendar.getTimeInMillis()将每个日历转换为long,然后使用方法putLong(key,long)将其保存在您的首选项中。您必须更改每个条目的密钥。这是一个例子:
SharedPreferences shrdPref = getSharedPreferences("sharePref",MODE_PRIVATE);
SharedPreferences.Editor prefEditor = shardPref.edit();
for(int i = 0; i<list.size();i++){
long millis = list.get(i).getTimeInMillis();
prefEditor.putLong("calendar"+i,millis);
prefEditor.commit();
}
然后您将使用以下内容检索它们:
int i =0;
while(shrdPref.getLong("calendar"+i,0)!=0){
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(shrdPref.getLong("calendar"+i,0));
list.add(cal);
i++;
}
有点黑客,不确定它是否有效,请尝试并让我知道。