我正在使用相同的查询以两种不同的方式获取日历事件。奇怪的是,一种方式有效,另一种方式无效,尽管一切几乎完全相同。在 Google 的 API Explorer 上使用 timeMin、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
最佳答案
想通了。
您必须使用接受TimeZone
的DateTime
构造函数。
即
DateTime startTime = new DateTime(new Date(), TimeZone.getDefault());
希望这可以为其他人节省我花 16 个小时来解决这个问题的时间。非常糟糕的文档。
关于android - 获取 Google 日历条目、Google API Java 客户端时错误的 startMin/startMax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531081/