Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过events.dtend更新calendar instances.end_Android_Events_Calendar_Updates_Instances - Fatal编程技术网

Android 通过events.dtend更新calendar instances.end

Android 通过events.dtend更新calendar instances.end,android,events,calendar,updates,instances,Android,Events,Calendar,Updates,Instances,更新CalendarContract.Events DTEND列时,为什么更改没有显示在CalendarContract.Instances结束列中 我的应用程序允许用户使用CalendarContract.events API查看和更改日历事件。代码对Events表执行更新,然后(稍后)使用Instances表将其读回。例如,对标题的更改可以正常工作(也就是说,我更新事件并可以在实例中读回更改)。对Events.DTEND的更改确实会显示在Instances.DTEND中,但如何使该更新也显示

更新CalendarContract.Events DTEND列时,为什么更改没有显示在CalendarContract.Instances结束列中

我的应用程序允许用户使用CalendarContract.events API查看和更改日历事件。代码对Events表执行更新,然后(稍后)使用Instances表将其读回。例如,对标题的更改可以正常工作(也就是说,我更新事件并可以在实例中读回更改)。对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");

谢谢。

解决方案是添加开始日期:

  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为空

我怀疑提供者代码所做的只是使用您提供的值,而不是重新蚀刻开始日期本身(显然,如果用户更改开始日期,您无论如何都必须提供它)。从减少数据库访问的角度来看,这是有意义的。可惜谷歌没有记录这些