如何使用google-api-java-client解析用户Google日历中事件的开始和结束时间?
从Google代码安装this示例Android项目后,我可以进入我的Google日历并解析一些信息(例如所有日历,事件名称,发布时间和摘要),但是我无法为我的生活获得活动的开始和结束时间。
我对代码的理解就是这样。
在主要活动类(CalendarAndroidSample.java)中,这是获取每个日历标题的方法:
void executeRefreshCalendars() {
String[] calendarNames;
List<CalendarEntry> calendars = this.calendars;
calendars.clear();
try {
CalendarUrl url = CalendarUrl.forAllCalendarsFeed();
// page through results
while (true) {
CalendarFeed feed = client.executeGetCalendarFeed(url);
if (feed.calendars != null) {
calendars.addAll(feed.calendars);
}
String nextLink = feed.getNextLink();
if (nextLink == null) {
break;
}
}
int numCalendars = calendars.size();
calendarNames = new String[numCalendars];
for (int i = 0; i < numCalendars; i++) {
calendarNames[i] = calendars.get(i).title;
}
} catch (IOException e) {
handleException(e);
calendarNames = new String[] {e.getMessage()};
calendars.clear();
}
上面的for循环将我帐户中每个日历的标题分配给字符串数组“calendarNames []。”
我已经发现在项目内部的一个separete java文件(Entry.java)中找到here,@ Key注释指示代码解析XML元素,字符串的名称应该与名称匹配元素。
public class Entry implements Cloneable {
@Key
public String summary;
@Key
public String title;
@Key
public String updated;
@Key
public String published;
@Key("link")
public List<Link> links;
@Override
protected Entry clone() {
try {
@SuppressWarnings("unchecked")
Entry result = (Entry) super.clone();
Data.deepCopy(this, result);
return result;
} catch (CloneNotSupportedException e) {
throw new IllegalStateException(e);
}
}
String getEditLink() {
return Link.find(links, "edit");
}
}
...所以
@Key
public String published;
...会在名为“published”的XML中找到该元素,并将该元素的值赋给该字符串。
因此,返回第一个引用的java方法executeRefreshCalendars()(在CalendarAndroidSample.java中),改变
calendarNames[i] = calendars.get(i).title;
到
calendarNames[i] = calendars.get(i).published;
告诉我活动发布的日期。
我认为我在理解这段代码时遇到的问题是,对于事件的开始和结束时间,数据位于一个包含两部分的XML元素中。
任何人都可以帮我了解如何做到这一点吗?我在我的浏览器中打开了10个以上的标签,并且在SO上找到了所有关于这方面的帮助,而我能找到的最接近帮助的是this帖子,但我无法弄清楚如何实现它我正在使用的示例项目。
感谢。
答案 0 :(得分:3)
您需要使用EventFeed并查看EventEntry类
返回的包含startTime / endTime的Atom字符串如下所示:
<gd:when startTime='2010-03-13T14:00Z' endTime='2010-03-13T14:30Z'/>
它在EventEntry类中建模如下:
@Key("gd:when")
public When when;
(使用@Key注释映射的When对象的属性)
When对象,对When对象
上的start / endTime属性建模@Key("@startTime")
public DateTime startTime;
@Key("@endTime")
public DateTime endTime;
与eventFeed交互时的客户端代码如下所示:
EventEntry event = eventFeed.get(0);
DateTime start = event.when.startDate;