【问题标题】:How to save Calendar data in shared preferences : Android如何在共享首选项中保存日历数据:Android
【发布时间】:2013-08-03 20:21:27
【问题描述】:

我有一个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 &lt;Calendar&gt; list = new ArrayList&lt;Calendar&gt;(); 保存到SharedPreferences 以及如何从SharedPrefernces 取回它。 您的帮助将不胜感激。谢谢

【问题讨论】:

    标签: android arraylist sharedpreferences


    【解决方案1】:

    您必须使用方法 Calendar.getTimeInMillis() 将每个日历转换为长日历,然后使用方法 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();
    • 我在平板电脑上写了代码,所以我没有任何 IDE 来检查代码。希望你喜欢。
    • 我建议您使用 new GregorianCalendar() 而不是 Calendar.getInstance();
    猜你喜欢
    • 2011-08-23
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2015-07-20
    • 2019-08-02
    • 1970-01-01
    • 2018-04-15
    相关资源
    最近更新 更多