1

我正在执行相同的查询以两种不同的方式获取日历事件。奇怪的是,一种方式有效,另一种方式无效,即使一切几乎完全相同。使用 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();

方法二:

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

4

1 回答 1

10

弄清楚了。

必须使用DateTime接受 a 的构造函数TimeZone

IE

DateTime startTime = new DateTime(new Date(), TimeZone.getDefault());

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

于 2012-07-19T22:11:38.883 回答