当我更新CalendarContract.Events DTEND列时,为什么更改不会显示在CalendarContract.Instances END列中?
我的应用允许用户使用CalendarContract.Events API查看和更改日历事件。代码执行Events表的更新,然后使用Instances表将其读回(稍后)。例如,对TITLE的更改工作正常(即,我更新事件并可以回读实例中的更改)。对Events.DTEND的更改确实显示在Instances.DTEND中,但是如何让该更新也显示在Instances.END中?
这很重要,因为显然,Android日历应用(以及我的应用)也使用Instances.BEGIN和Instances.END来确定要在日历中显示的内容。
这是我的更新代码:
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put (Events.CALENDAR_ID, calendarId);
values.put (Events.TITLE, title);
values.put (Events.DTEND, eventEnd.getTimeInMillis());
String where = "_id =" + eventId +
" and " + CALENDAR_ID + "=" + calendarId;
int count = cr.update (Events.CONTENT_URI, values, where, null);
if (count != 1)
throw new IllegalStateException ("more than one row updated");
感谢。
答案 0 :(得分:2)
解决方案原来是添加开始日期:
ContentResolver cr = getContentResolver();
ContentValues values = new ContentValues();
values.put (Events.CALENDAR_ID, calendarId);
values.put (Events.TITLE, title);
values.put (Events.DTSTART, eventStart.getTimeInMillis());
values.put (Events.DTEND, eventEnd.getTimeInMillis());
String where = "_id =" + eventId +
" and " + CALENDAR_ID + "=" + calendarId;
int count = cr.update (Events.CONTENT_URI, values, where, null);
if (count != 1)
throw new IllegalStateException ("more than one row updated");
提醒:此案例仅说明如何更新非重复事件。非重复事件的RRULE为空。
我怀疑提供者代码正在做的是仅使用您提供的值而不是重新获取开始日期本身(显然,如果用户更改了开始日期,则无论如何都必须提供它)。从减少数据库访问的角度来看,这是有道理的。太糟糕的谷歌没有记录任何此类内容。