在Android中使用google-java-api-client获取Google日历活动的开始和结束时间

时间:2011-06-09 19:34:41

标签: java android google-calendar-api google-api-java-client

如何使用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帖子,但我无法弄清楚如何实现它我正在使用的示例项目。

感谢。

1 个答案:

答案 0 :(得分:3)

您需要使用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=samples

返回的包含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;