5

Google カレンダー 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

上記のコードを実行した後、このエラーが発生し続けます (注: 繰り返しを指定しないとすべてが機能しますが、これによりイベントが 1 回発生することは明らかです):

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 の Api Explorerを使用して、繰り返しフィールドを含む JSON を手動で作成したところ、機能しました。

から作成された JSON をログに記録した後event、タイムゾーンが渡されていないようです。

{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.

なぜ彼らが渡されないのか分かりません...

4

1 に答える 1

6

DateTime オブジェクトから EventDateTime を作成するときに、TimeZone を再度追加する必要があるようです。以下が機能しました:

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");
于 2012-01-16T16:11:13.547 に答える