#java #google-calendar-api
#java #google-calendar-api
Вопрос:
Я искал повсюду, чтобы найти пример, поскольку то, что я пытаюсь, похоже, не работает. Я получаю эту ошибку:
com.google.gdata.util.InvalidEntryException: Bad Request
Invalid request URI
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.update(Service.java:1563)
at com.google.gdata.client.Service.update(Service.java:1530)
at com.google.gdata.client.GoogleService.update(GoogleService.java:583)
at CalendarConnect.deleteEvent(CalendarConnect.java:37)
at ProgMain.main(ProgMain.java:26)
Вот пример кода, который я использую:
CalendarService service = new CalendarService("Fourth Year Project");
service.setUserCredentials(username, password);
URL postUrl = new URL("https://www.google.com/calendar/feeds/default/private/full");
CalendarEventEntry myEntry = new CalendarEventEntry();
myEntry.setTitle(new PlainTextConstruct("TEST"));
myEntry.setContent(new PlainTextConstruct("TEST"));
DateTime startTime = DateTime.parseDateTime(StartDateTime);
DateTime endTime = DateTime.parseDateTime(EndDateTime);
When eventTimes = new When();
eventTimes.setStartTime(startTime);
eventTimes.setEndTime(endTime);
myEntry.addTime(eventTimes);
CalendarEventEntry insertedEntry = service.update(postUrl, myEntry);
URL deleteUrl = new URL(insertedEntry.getEditLink().getHref());
service.delete(deleteUrl);
Он был нарезан и изменен настолько сильно, что я не уверен, где я сейчас нахожусь. Кто-нибудь сталкивался с этой проблемой? Если да, то как вы это преодолели? У кого-нибудь есть пример какого-либо кода, который работает, поскольку Google предоставляет только одну строку кода в своем объяснении.
Ответ №1:
Можете ли вы попробовать
CalendarEventEntry insertedEntry = service.insert(postUrl, myEntry);
вместо
CalendarEventEntry insertedEntry = service.update(postUrl, myEntry);
?
Я думаю, что остальной код, который у вас есть, предназначен для вставки записи о событии, и вы не можете вызвать update с его помощью. Если вы измените его на insert, он вставит и удалит запись (если это сработало), и я не вижу в этом смысла. Если вы пытаетесь получить запись и удалить ее, в сообщении есть несколько примеров.
Ответ №2:
Единственное, что вам нужно сделать, это иметь «дескриптор» для вашего события, есть другой способ получить его, я покажу вам, как я делаю, если вы хотите удалить определенное событие в своем календаре
String title = "Event title that i want to delete";
try{
URL calendarUrl= new URL(calendar.getLink(Link.Rel.ALTERNATE, Link.Type.ATOM).getHref());
CalendarEventFeed resultFeed = service.getFeed(calendarUrl, CalendarEventFeed.class);
for (int i = 0; i < resultFeed.getEntries().size(); i ) {
CalendarEventEntry entry = resultFeed.getEntries().get(i);
if(entry.getTitle().getPlainText().equals(title)){
entry.delete();
break;
}
}
}
catch (IOException e) {
e.printStackTrace();
}
catch (ServiceException e) {
e.printStackTrace();
}
Итак, вам нужно только установить заголовок (или любой другой параметр) определенного календаря, если вы не знаете, как получить «дескриптор» для календаря, который вы уже создали ранее, я могу объяснить вам, как. В моем коде «календарь» — это ClendarEntry.
Комментарии:
1. Не могли бы вы, пожалуйста, объяснить этот код (в вашем ответе)? Таким образом вы можете получить больше положительных отзывов!
2. Спасибо за ваш комментарий, я надеюсь, что теперь это лучше.