Google元素API中的“元素必须包含属性ID的值”

时间:2011-05-20 15:23:47

标签: java google-calendar-api gdata-api gdata

在使用Java Google Calendar API时,我遇到了一个例外情况,我无法做到这一点。我正在做的是创建一个插入事件的Google日历连接器。其中一些事件正在重复,其中一些事件对重复模式有例外。我在创建事件和重复事件方面非常成功,但在尝试制作例外时遇到了这些问题。

我正在使用的代码是:

CalendarEventEntry gglAppt = new CalendarEventEntry();
OriginalEvent originallink = new OriginalEvent();
originallink.setOriginalId(repeatingEvent.getIcalUID());
When originalWhen = new When();

originalWhen.setStartTime(DateTime.parseDate("2011-05-01"));
originallink.setOriginalStartTime(originalWhen);

When exceptionWhen = new When();
exceptionWhen.setStartTime(DateTime.parseDate("2011-05-10"));

gglAppt.setOriginalEvent(originallink);
gglAppt.setStatus(EventStatus.CANCELED);
gglAppt.addTime(exceptionWhen);

try {
    //I can vouch for this line, it works elsewhere in the code.
    //CalendarServiceManager is a custom class if you didn't guess ;-)
    CalendarServiceManager.getInstance().addNewEvent(gglAppt, http://www.google.com/calendar/feeds/default/calendars/testemail%40gmail.com);
} catch (IOException e) {
    e.printStackTrace();
} catch (ServiceException e) {
    e.printStackTrace();
}

例外是:

com.google.gdata.util.InvalidEntryException: Bad Request
Element must contain value for attribute id
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:594)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:552)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
at com.google.gdata.client.Service.insert(Service.java:1409)
at com.google.gdata.client.GoogleService.insert(GoogleService.java:599)
at com.testapp.google.CalendarServiceManager.addNewEvent(CalendarServiceManager.java:138)
at com.testapp.google.GoogleAdapter.dealWithExceptions(GoogleAdapter.java:581)
...etc

根据我在互联网上看到的内容,我的理解是属性ID是您为Google对象设置的内容,供您跟踪它们。我不知道在哪里设置属性ID,我很困惑为什么我不必为我提交的任何其他事件设置属性ID。

这个被抛出的异常是什么?它是什么意思,我该怎么办呢?

任何帮助都将一如既往地受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

在这里找到我的问题的答案:

http://code.google.com/apis/calendar/community/forum.html?place=topic%2Fgoogle-calendar-help-dataapi%2FvD6xahZq8ms%2Fdiscussion

原来,repeatEvent还没有id。我刚创建它并将其发送到服务器,但没有使用从服务器返回的本地对象更新本地对象;那个有身份的人。