糟糕的startMin / startMax获取Google Calendar Entries,Google API Java客户端

时间:2012-07-17 21:23:05

标签: android google-calendar-api google-api-java-client

我正在使用相同的查询以两种不同的方式获取Calendar事件。奇怪的是,它的一种工作方式,另一种方式却没有,即使一切都几乎完全相同。使用timeMin,Google API Explorer上的timeMax会在第二种方法发送时返回错误请求。

不仅如此,Google Calendar API文档说该字段应该是start-min和start-max,而客户端和API Explorer说该字段应该是timeMin和timeMax。

以下是方法1的代码:

void setPeriod() {
    Date nowDate = new Date();
    startTime = new DateTime(nowDate);
    Time t = new Time();
    t.setToNow();
    t.hour = 23;
    t.minute = 59;
    nowDate.setTime(t.toMillis(false));
    endTime = new DateTime(nowDate);
}

new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
    try {
    Events evlist = g.getClient().events().list(calendarIds.get(cal)).setTimeMin(startTime).setTimeMax(endTime).execute();
    if (evlist.getItems() != null) {
        //Parse the events
    ...
}.execute();

方法2:

new AsyncTask<Void, Void, List<Event>>() {
    @Override
protected List<Event> doInBackground(Void... arg0) {
    Date nowDate = new Date();
    DateTime startTime = new DateTime(nowDate);
    Time t = new Time();
    t.setToNow();
    t.hour = 23;
    t.minute = 59;
    nowDate.setTime(t.toMillis(true));
    DateTime endTime = new DateTime(nowDate);
    Calendar client = com.google.api.services.calendar.Calendar
                .builder(transport, jsonFactory)
                .setApplicationName("Wayk by Senti")
                .setHttpRequestInitializer(
                    new HttpRequestInitializer() {
                        public void initialize(HttpRequest request)
                                        throws IOException {
                                    request.getHeaders()
                                            .setAuthorization(
                                                    GoogleHeaders
                                                            .getGoogleLoginValue(authToken));
                                }
                            })
                    .setJsonHttpRequestInitializer(
                            new JsonHttpRequestInitializer() {

                                public void initialize(
                                        JsonHttpRequest request)
                                        throws IOException {
                                    CalendarRequest calendarRequest = (CalendarRequest) request;
                                    calendarRequest
                                            .setKey(CalendarClientCredentials.KEY);
                                }
                            }).build();
            try {
                List<Event> events = new ArrayList<Event>();
                for (int i = currentCal; i < enables.size(); i++) {
                    if (enables.get(i)) {
                        AiLog.v("Getting events");
                        AiLog.v("AuthToken: " + authToken);
                        AiLog.v("CalendarID: " + calendarIds.get(i));
                        AiLog.v("Calendar name: " + calendarNames.get(i));
                        AiLog.v("Calendar account: " + account);
                        Calendar.Events.List eventReq = client.events()
                                .list(calendarIds.get(i)).setTimeMin(startTime).setTimeMax(endTime).execute();//Bad request here

请注意,两者的客户端完全相同。第二种方法中的客户端成功获取该帐户的日历列表。我已经验证日历ID是正确的,这使我得到了来自startMin和startMax的错误。

任何帮助表示感谢。

干杯,Z

1 个答案:

答案 0 :(得分:9)

想出来。

使用接受DateTime的{​​{1}}构造函数。

TimeZone

希望这可以节省其他人16小时我试图解决这个问题。真的很糟糕的文档。