2012-07-17 126 views
1

我开始使用相同的查询来获取日历事件两种不同的方式。奇怪的是,一种方式是有效的,而另一种方式则不行,即使一切都几乎完全相同。在Google的API Explorer中使用timeMin,timeMax会返回第二个方法发送时间的错误请求。获取Google日历条目Google API Java客户端

不仅如此,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

这是timeMin和timeMax字段的问题。如果你删除最小和最大时间,它工作正常。我一直在试图解决与最新的库相同的问题。事情是在早期版本(日历api库v1.5.0),timeMin和timeMax接受字符串值,所以我可以根据时区格式化日期,但现在它已被更改为接受DateTime值并设置DateTime值,即使使用接受时区转换的构造函数似乎不起作用并产生400错误请求。 – praneetloke 2012-07-19 15:01:16

+0

我也在旧图书馆工作。不过,我终于明白了。检查答案 – 2012-07-19 22:12:42

回答

9

想通了。

使用DateTime构造函数,接受TimeZone

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

希望这样可以节省别人的16个小时里,我花了试图弄清楚这一点。真的很糟糕的文件。

+0

谢谢。我正在使用DateTime构造函数,该构造函数接受tz shift int,但它不起作用,但传递了Date对象和TimeZone对象的默认实例! – praneetloke 2012-07-20 03:10:28

相关问题