如何使用google-api-java-client解析用户Google日历中事件的开始和结束时间?
从Google代码安装此示例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 []”。
我已经发现,在这里找到的项目(Entry.java)中一个单独的java文件中,@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;
…将在XML中找到名为“已发布”的元素,并将该元素的值分配给字符串。
因此,返回第一个引用的Java方法executeRefreshCalendars()(在CalendarAndroidSample.java内部),
calendarNames[i] = calendars.get(i).title;
至
calendarNames[i] = calendars.get(i).published;
给我事件发布的日期。
我认为与理解此代码有关的问题是,对于事件的开始时间和结束时间,数据位于XML元素内,该元素具有两部分。
谢谢。
您将需要使用EventFeed并查看EventEntry类
http://code.google.com/p/google-api-java- client/source/browse/calendar-v2-atom-oauth- sample/src/com/google/api/client/sample/calendar/v2/ model / EventEntry.java?repo =样本
返回的包含startTime / endTime的Atom字符串如下所示:
<gd:when startTime='2010-03-13T14:00Z' endTime='2010-03-13T14:30Z'/>
它是在EventEntry类中建模的,如下所示:
@Key("gd:when") public When when;
(When对象的属性,使用@Key批注进行映射)
在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;