こんにちは私は、Androidアプリ用のgoogle-api-java-clientとcalenderAPIサービスを使用してカレンダーにイベントを追加しようとしています。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()
エラーの完全なスタックトレースは、pastebinlog.txtにあります。誰かがこれを修正する方法を知っていますか、または私はコードを間違って実装しましたか?コード全体は、pastbinAsyncBatchInsertEvent.javaにあります。