Android -Kalender -API -Einfügen wiederkehrendes Ereignis
-
28-10-2019 - |
Frage
Verwendung der Google -Kalender -API.
Nach dem Durchsuchen der RFC2445, Ich kann immer noch kein Wiederauftreten eines Ereignisses festlegen.
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
Nachdem ich den obigen Code ausgeführt habe, erhalte ich diesen Fehler weiter (NB: Alles funktioniert, wenn ich die Wiederholung angibt, obwohl dies offensichtlich das Ereignis einzeln auftreten):
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)
Ich habe manuell ein wiederkehrendes Ereignis im Kalender erstellt und eine einfache Methode zum Lesen gemacht. Bei der Ausführung event.getRecurrence
. Das Wiederauftreten war "RRULE:FREQ=WEEKLY;WKST=MO;BYDAY=MO"
, was genau feststellte, dass das Ereignis, das ich erstellt hatte, wöchentlich an einem Montag wiederholt.
Kann jemand erkennen, wo ich falsch lage?
BEARBEITEN:
Verwendung Googles API -Explorer, Ich habe den JSON manuell mit dem Recurce -Feld erstellt und es funktionierte.
Nach dem Protokollieren des JSON, der aus erstellt wird event
, Es scheint, dass die Zeitzone nicht bestanden wird.
{end={dateTime=2012-01-16T09:50:00.000Z}, location=, recurrence=[RRULE:FREQ=WEEKLY;], start={dateTime=2012-01-16T09:00:00.000Z}, summary=HELLO WORLD}
Zusätzlich durchführen event.getStart().getTimeZone().toString()
verursacht java.lang.NullPointerException
.
Ich bin mir nicht sicher, warum sie nicht bestanden werden ...
Lösung
Es scheint, dass man die Zeitzone erneut hinzufügen muss, wenn man ein EventDatetime aus dem DateTime -Objekt erstellt. Folgendes funktionierte:
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");