1

这是我查看从 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,从而导致程序崩溃。有谁知道如何解决这个问题?还有其他我应该通过的额外内容吗?

4

3 回答 3

4

beginTime 和 endTime 可以为 0/null,因为您从错误的数据库中获取它们,当然是从事件数据库中获取的。您应该改用实例数据库(例如:SDK 8 上的“content://com.android.calendar/instances/when/”)。

实例数据库中,您将获得所有“真实”事件:在那里,每个重复事件都有所需的实例数,并具有正确的开始和结束时间戳;并且其他事件也是可见的。您只需阅读这些字段 - event_id、begin、end - 并使用它们来打开您的 Intent。

于 2012-11-25T13:23:50.047 回答
2

在处理日历事件时,我发现 calendar.db 中的 events 表存储了您使用过的正常事件的信息。(我猜你使用 startTime 作为 Dtstart 和 endTime 作为 Dtend)

但在 Recurrence 事件的情况下,Dtend 将为空。因此,请改为使用 lastDate 列,因为该列永远不会为空。它在重复事件和正常事件的情况下都可以很好地工作。

但是,如果您需要有关重复事件的更多信息,请按照@GeH 的建议使用实例表(例如每个事件的确切开始和结束时间)。

于 2012-12-05T16:26:53.947 回答
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 );
于 2012-11-23T16:28:16.663 回答