如何在Android中使用共享首选项保存日历数据

7

我有一个Calendar类型的ArrayList,我需要将它的数据保存到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中,并且如何从SharedPreferences中获取它。 非常感谢您的帮助。谢谢。

1个回答

11
您需要使用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++;
}

这是一个小技巧,不确定是否有效,请尝试并告诉我。


日历cal = new Calendar();不起作用,所以我使用了Calendar cal = Calendar.getInstance();。 - Sanjay Joshi
我是在平板电脑上编写这段代码的,所以没有 IDE 来检查代码。希望你喜欢它。 - Quentin Golsteyn
我建议您使用new GregorianCalendar(),而不是使用Calendar.getInstance()。 - Quentin Golsteyn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接