这是我的代码,以查看从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);
此代码完全适用于除周期性事件的所有事件。 对于被重复任何情况下,结束时间返回为空,导致程序崩溃。 任何人都知道如何解决这个问题? 是否有其他演员我要传递?
BEGINTIME和endTime可以是0 / null,因为你从一个错误的数据库得到了他们,肯定是从事件数据库。 您应该使用情况数据库,而不是(比如:“内容://com.android.calendar/instances/when/”关于SDK 8)。
在实例 DB,你会得到所有“真正的”事件:有,每个重复事件具有根据需要尽可能多的情况下,与正确的开始和结束时间戳记; 和其他事件是可见的了。 你只需要阅读这些领域 - 事项标识,开始,结束 - 并用它们来打开你的意图。
虽然与日历事件的工作,我发现你已经使用在calendar.db事件表存储的正常事件的信息。 (我猜你正在使用的开始时间和DTSTART作为结束时间DTEND)
但在复发事件的情况下,DTEND将是无效的。 因此,而不是使用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 );