0

私は、GoogleコードでここにあるいくつかのGoogleカレンダー機能を統合するためにGoogleが提供するサンプルAndroidアプリケーションに苦労しています。

元のコードを少し変更しました。具体的には、326行目のCalendarAndroidSample.javaクラスで次のように変更しました。

CalendarUrl url = CalendarUrl.forAllCalendarsFeed();

今計算するには:

CalendarUrl url = CalendarUrl.forEventFeed(settings.getString("accountName", "NULL"), "private", "full");

これにより、リストビューにカレンダー内のすべてのイベントが正常に表示されます。

Googleカレンダーにイベントを追加すると、無限ループが発生します。新しいイベントが追加されると、サンプルアプリがフリーズし、DDMSを見ると、logcatがこれを終わりなく繰り返し吐き出しているのがわかります。

06-19 11:19:28.556: DEBUG/dalvikvm(7493): GC_FOR_MALLOC freed 11761 objects / 519744 bytes in 39ms

アプリのループを停止する唯一の方法は、カレンダーイベントを削除することです。カレンダーイベントが削除されると、アプリが復活し、私のイベントが一覧表示されますが、リストビューにはすべてのイベントが含まれ、何度も繰り返されます。フィードが止まらないようなものです。

私の最善の推測は、333行目でコードが次のようになっていることです。

String nextLink = feed.getNextLink();
    if (nextLink == null) {
      break;

nextLinkがnullになることはないため、ループが作成されます。しかし、なぜこれはカレンダーイベントを追加した場合にのみ発生するのですか?

編集:

いくつかのカレンダーイベントを削除すると、機能し始めました。カレンダーに25を超えるイベントがあるように見えますが、ループし始めますか?これはどういう意味ですか?

4

1 に答える 1

0

私は自分の愚かさに気づいた後、この投稿を削除するつもりでしたが、私のように激しく倒れる他の人のためにそれを残すつもりです。

カレンダーに25を超えるイベントがある場合、nextLinkがnullになることはなかったため、無限ループが作成されていました。maxResultsの値を設定しない場合、デフォルトは25だと思います。したがって、カレンダーに25を超えるイベントがある場合、返されるAtomには正確に25のイベントがあるため、「null」nextLinkは存在しません。

maxResultsを50に設定し、カレンダーに49のイベントしか存在しない場合、50番目のnextLinkはnullになり、ループからの中断がトリガーされます。

maxResultsを1,000,000のような巨大な数値に設定しました。ある人が毎日カレンダーに10のイベントがあり、80歳まで生きているとすると、それは約291,000のイベントに相当します。1,000,000は安全な数だと思います。

于 2011-06-20T05:58:37.460 に答える