5

使用Google Calendar ApiAndroid日历API插入周期性事件

浏览完rfc2445后,我仍然无法设置事件的重现。

private String[] days = {"SU", "MO", "TU", "WE", "TH", "FR", "SA"}; 
private String rrule = "RRULE:FREQ=WEEKLY;WKST=MO;BYDAY="; 
private Event createdEvent; 
... 

Event event = new Event(); 
StringBuilder sb = new StringBuilder(); 
sb.append(rrule); 
sb.append(days[startTime.get(java.util.Calendar.DAY_OF_WEEK)-1]); 
event.setSummary("HELLO WORLD"); 
event.setLocation(""); 

DateTime start = new DateTime(startTime.getTime(), TimeZone.getTimeZone("UTC")); 
event.setStart(new EventDateTime().setDateTime(start)); 
DateTime end = new DateTime(endTime.getTime(), TimeZone.getTimeZone("UTC")); 
event.setEnd(new EventDateTime().setDateTime(end)); 

//Setting Recurrence 
ArrayList<String> recur = new ArrayList<String>(); 
recur.add(sb.toString()); 
event.setRecurrence(recur); 

createdEvent = cal.events().insert("primary", event).execute(); //line 167 

运行上面的代码后,我不断收到此错误(注:一切正常,如果我忽略指定的复发,但显然这使得事件单发生):

01-13 19:26:17.190: WARN/System.err(5732): com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request 
01-13 19:26:17.190: WARN/System.err(5732): { 
01-13 19:26:17.190: WARN/System.err(5732): "code" : 400, 
01-13 19:26:17.190: WARN/System.err(5732): "errors" : [ { 
01-13 19:26:17.190: WARN/System.err(5732):  "domain" : "global", 
01-13 19:26:17.190: WARN/System.err(5732):  "message" : "Required", 
01-13 19:26:17.190: WARN/System.err(5732):  "reason" : "required" 
01-13 19:26:17.190: WARN/System.err(5732): } ], 
01-13 19:26:17.190: WARN/System.err(5732): "message" : "Required" 
01-13 19:26:17.190: WARN/System.err(5732): } 
01-13 19:26:17.190: WARN/System.err(5732):  at com.google.api.client.googleapis.services.GoogleClient.execute(GoogleClient.java:123) 
01-13 19:26:17.190: WARN/System.err(5732):  at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:67) 
01-13 19:26:17.190: WARN/System.err(5732):  at com.google.api.services.calendar.Calendar$Events$Insert.execute(Calendar.java:2308) 
01-13 19:26:17.190: WARN/System.err(5732):  at com.example.myproject.className.run(className.java:167) 
01-13 19:26:17.190: WARN/System.err(5732):  at java.lang.Thread.run(Thread.java:1020) 

我手动在日历中创建了一个周期性事件,并制作了一个简单的方法将其读入。执行event.getRecurrence时。再次发生的是"RRULE:FREQ=WEEKLY;WKST=MO;BYDAY=MO",准确地说,我创建的事件是每周在周一重复发生。

任何人都可以发现我要去哪里错了吗?

编辑:

使用Google's Api Explorer,我手动创建的JSON与复发领域和它的工作。

在记录从event创建的JSON后,似乎时区未被传递。

{end={dateTime=2012-01-16T09:50:00.000Z}, location=, recurrence=[RRULE:FREQ=WEEKLY;], start={dateTime=2012-01-16T09:00:00.000Z}, summary=HELLO WORLD} 

此外,执行event.getStart().getTimeZone().toString()引起java.lang.NullPointerException

不知道为什么他们没有被通过......

回答

6

看来,一个人必须从创建DateTime对象的EventDateTime时再次添加时区。以下工作:

DateTime start = new DateTime(startTime.getTime(), TimeZone.getTimeZone("UTC")); 
event.setStart(new EventDateTime().setDateTime(start).setTimeZone("UTC"); 
DateTime end = new DateTime(endTime.getTime(), TimeZone.getTimeZone("UTC")); 
event.setEnd(new EventDateTime().setDateTime(end).setTimeZone("UTC"); 
+0

就是这样。谢谢! – 2012-06-07 08:57:59