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

San*_*shi 4 android arraylist sharedpreferences

我有一个ArrayListCalendar类型,我需要将数据保存到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();
Run Code Online (Sandbox Code Playgroud)

但是,如果我按照相同的方法保存Calendar数据,我将错误更改为Set类型String.

我怎么能保存ArrayList <Calendar> list = new ArrayList<Calendar>();SharedPreferences我,以及如何得到它回来SharedPrefernces.非常感谢您的帮助.谢谢

Que*_*eyn 7

您必须使用方法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();
       }
Run Code Online (Sandbox Code Playgroud)

然后你会用以下方法检索它们:

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++;
}
Run Code Online (Sandbox Code Playgroud)

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