【问题标题】:google-api-java-client for Google Calendar on Android Infinite loopgoogle-api-java-client 用于 Android 无限循环上的 Google 日历
【发布时间】:2011-06-19 15:26:29
【问题描述】:

我一直在努力使用 Google 提供的示例 android 应用程序,用于集成在 Google 代码中找到的一些 Google 日历功能 here

我只是稍微修改了原始代码。具体来说,在第 326 行的 CalendarAndroidSample.java 类中,我已修改:

CalendarUrl url = CalendarUrl.forAllCalendarsFeed();

现在计算:

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

这可以很好地用我日历中的所有事件填充列表视图。

每当我将事件添加到我的谷歌日历时,就会发生无限循环。一旦添加了一个新事件,示例应用程序就会冻结,查看 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 个事件,它开始循环?这是什么意思?!

【问题讨论】:

  • 我使用了 url.maxResults = 2000 这似乎已经纠正了这个问题......这是修复循环的正确方法吗?

标签: android google-calendar-api google-api-java-client


【解决方案1】:

在意识到自己的愚蠢之后,我打算删除这篇文章,但我会把它留给像我一样努力的其他人。

正在创建无限循环,因为当我的日历中有超过 25 个事件时,nextLink 从未变为空。我猜如果没有为 maxResults 设置值,默认值为 25。因此,当我的日历中有 超过 25 个事件时,“null”nextLink 永远不会存在,因为返回的 Atom 有正好 25 个事件。

如果我将 maxResults 设置为 50 并且我的日历中仅存在 49 个事件,则第 50 个 nextLink 将为空,从而触发循环中断。

我刚刚将 maxResults 设置为一个巨大的数字,例如 1,000,000。我想如果一个人每天的日历中有 10 个事件并且活到 80 岁,那将仅相当于大约 291,000 个事件。我认为 1,000,000 是一个安全的数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多