您好我正在尝试使用 google-api-java-client 和日历 API 服务为 android 应用程序添加事件到日历中。我使用 Yaniv Inbar 创建的 calendersample 项目作为模板,效果很好。将 1 个事件插入所选日历时效果很好,但是当我尝试将事件批量添加到日历时,会出现非法状态异常。
在示例中,您可以像这样批量添加日历。整个类可以在这里找到AsyncBatchInsertCalendars.java
@Override
protected void doInBackground() throws IOException {
BatchRequest batch = client.batch();
for (Calendar calendar : calendars) {
client.calendars().insert(calendar).setFields(CalendarInfo.FIELDS)
.queue(batch, new JsonBatchCallback<Calendar>() {
public void onSuccess(Calendar calendar, GoogleHeaders headers) {
model.add(calendar);
}
@Override
public void onFailure(GoogleJsonError err, GoogleHeaders headers)
throws IOException {
Utils.logAndShowError(activity, CalendarSampleActivity.TAG, err.getMessage());
}
});
}
batch.execute();
}
我重写了这门课,使它成为事件而不是日历。如果您查看整个类AsyncBatchInsertEvent.java,您会发现在 doInBackground 方法中,我还循环遍历了一个创建事件列表的数组列表。应该将其添加到要插入给定日历的批次中。
@Override
protected void doInBackground() throws IOException {
BatchRequest batch = client.batch();
for (Event event : events) {
client.events().insert(calender.id, event).queue(batch,
new JsonBatchCallback<Event>() {
public void onSuccess(Event event, GoogleHeaders headers) {
//TODO show succes message.
}
@Override
public void onFailure(GoogleJsonError err, GoogleHeaders headers)
throws IOException {
Utils.logAndShowError(activity, EventActivity.TAG, err.getMessage());
}
});
}
batch.execute();
}
如果我使用它,则会出现异常并且应用程序崩溃
W/dalvikvm(21030): threadid=20: thread exiting with
uncaught exception (group=0x40c19930)
E/AndroidRuntime(21030): FATAL EXCEPTION: AsyncTask #2
E/AndroidRuntime(21030): java.lang.RuntimeException: An error occured
while executing doInBackground()
可以在 pastebin log.txt找到错误的完整堆栈跟踪。有谁知道如何解决这个问题或者我是否错误地实现了代码?整个代码可以在 pastbin AsyncBatchInsertEvent.java中找到