这是我查看从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,导致程序崩溃。有谁知道怎么解决这个问题?还有其他额外的东西我应该通过吗?
答案 0 :(得分:4)
beginTime和endTime可以是0 / null,因为你从错误的数据库中获取它们,当然来自 events 数据库。 您应该使用实例数据库(例如:SDK 8上的“content://com.android.calendar/instances/when/”)。
在实例数据库中,您将获得所有“真实”事件:在那里,每个周期性事件都有所需数量的实例,具有正确的开始和结束时间戳;其他事件也是可见的。您只需阅读这些字段 - event_id,begin,end - 并使用它们打开您的Intent。
答案 1 :(得分:2)
在处理日历事件时,我发现calendar.db中的事件表存储了您使用的正常事件的信息。 (我猜你正在使用startTime作为Dtstart和endTime作为Dtend)
但是在重复事件的情况下,Dtend将为null。因此,请使用lastDate列,因为此列永远不会为null。它既适用于复发事件,也适用于正常事件。
但是如果您需要有关重复事件的更多信息,请按照@GeH的建议使用Instances表(如每个事件的确切开始和结束时间)。
答案 2 :(得分:0)
我认为您可能希望在解析之前进行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 );