这是我查看从ListActivity中选择的事件的代码(events
是包含所有这些事件的ArrayList):
Uri viewUri = Uri.parse("content://com.android.calendar/events/" + events.get(position).id);
Intent l_intent = new Intent(Intent.ACTION_VIEW);
l_intent.putExtra("beginTime", Long.parseLong(events.get(position).startTime));
l_intent.putExtra("endTime", Long.parseLong(events.get(position).endTime));
startActivity(l_intent);
此代码适用于除重复事件之外的所有事件。对于任何重复发生的事件,endTime返回null,导致程序崩溃。有谁知道怎么解决这个问题?还有其他额外的东西我应该通过吗?
beginTime和endTime可以是0 / null,因为你从错误的数据库中获取它们,当然来自事件数据库。您应该使用实例数据库(例如:SDK 8上的“content://com.android.calendar/instances/when/”)。
在实例DB中,您将获得所有“真实”事件:在那里,每个重复事件都有所需数量的实例,具有正确的开始和结束时间戳;其他事件也是可见的。您只需阅读这些字段 - event_id,begin,end - 并使用它们打开您的Intent。
在处理日历事件时,我发现calendar.db中的事件表存储了您使用的正常事件的信息。 (我猜你正在使用startTime作为Dtstart和endTime作为Dtend)
但是在重复事件的情况下,Dtend将为null。因此,请使用lastDate列,因为此列永远不会为null。它既适用于复发事件,也适用于正常事件。
但是,如果您需要有关重复事件的更多信息,请使用@GeH建议的实例表(如每个事件的确切开始和结束时间)。
我想你可能想在解析前放一个null
检查:
long endTime = 0L;//use some default value
if( events.get(position).endTime != null)
endTime = Long.parseLong(events.get(position).endTime);
}
l_intent.putExtra("endTime", endTime );