我开始使用相同的查询来获取日历事件两种不同的方式。奇怪的是,一种方式是有效的,而另一种方式则不行,即使一切都几乎完全相同。在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
这是timeMin和timeMax字段的问题。如果你删除最小和最大时间,它工作正常。我一直在试图解决与最新的库相同的问题。事情是在早期版本(日历api库v1.5.0),timeMin和timeMax接受字符串值,所以我可以根据时区格式化日期,但现在它已被更改为接受DateTime值并设置DateTime值,即使使用接受时区转换的构造函数似乎不起作用并产生400错误请求。 – praneetloke 2012-07-19 15:01:16
我也在旧图书馆工作。不过,我终于明白了。检查答案 – 2012-07-19 22:12:42