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

时间:2013-08-02 14:09:53

标签: android arraylist sharedpreferences

我有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}}。 非常感谢您的帮助。谢谢

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

有点黑客,不确定它是否有效,请尝试并让我知道。