Android日历重复活动的结束日期/时间错误

问题描述 投票:1回答:3

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

java android android-intent google-calendar-api
3个回答
4
投票

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

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


2
投票

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

但是在重复事件的情况下,Dtend将为null。因此,请使用lastDate列,因为此列永远不会为null。它既适用于复发事件,也适用于正常事件。

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


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 );
© www.soinside.com 2019 - 2024. All rights reserved.