小编典典

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

java

如何使用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元素内,该元素具有两部分。

谢谢。


阅读 314

收藏
2020-11-16

共1个答案

小编典典

您将需要使用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;
2020-11-16