Запрос поставщика содержимого календаря в течение месяца, но отображение экземпляров в день

У нас есть приложение, которое расставляет точки в представлении месяца, где происходят события календаря. Мы используем поставщика содержимого календаря, чтобы заполнить представление.

Единственная проблема в том, что мы запрашиваем контент-провайдера около 30 раз в месяц: с 1 по 30 ноября. Таким образом, мы получаем правильное количество экземпляров в день. Таким образом, сам контент-провайдер использует правила повторения и «многодневные» события. Например: У нас есть мероприятие, которое проходит с 4 по 9 ноября. Ежедневно запрашивая поставщика контента, мы получим событие: 4, 5, 6, 7, 8 и 9 ноября. Это, очевидно, правильно. Но это очень негативно сказывается на производительности. С другой стороны, если я запрошу только один раз: 1-30 ноября, я получу одно и то же событие только один раз. Поэтому мне нужно сделать некоторые вычисления самостоятельно, чтобы определить, в каких ячейках должно появиться событие.

Итак, мне было интересно, есть ли помощник или утилита, которая делает это для меня: 1 запрос: но 5 раз отдельный экземпляр для события, которое происходит более одного раза в этот промежуток времени.


person basvk    schedule 04.11.2013    source источник
comment
Я думаю, вам следует попробовать выполнить запрос на экземплярах, используя нестандартную проекцию, которая различает возвращаемые записи для каждого дня. Должно быть какое-то поле, которое отличает экземпляры 4, 5 и т. д. друг от друга.   -  person Jose_GD    schedule 22.04.2014


Ответы (2)


Вы можете запросить поля rrule, dtstart и dtend из CalendarContract.Events URI и использовать их для расчета конкретных дат. Проверьте эту ссылку для описания значения поля, а также эту ссылка.

person Mohamed_AbdAllah    schedule 12.11.2013
comment
Разве вы не должны получить то, что хотите, если будете запрашивать экземпляры вместо событий developer.android.com/guide/topics/providers/ ? - person mtotschnig; 14.11.2013
comment
Для правил повторения это так, только для событий, которые имеют другое время начала и окончания, это не так. - person basvk; 18.11.2013

Почему бы вам не проверить таблицу экземпляров базы данных календаря, я столкнулся с аналогичной проблемой производительности, и эта таблица решила ее. В основном он содержит все повторения событий как отдельные экземпляры, короче говоря, если событие должно произойти в течение следующих 5 дней, в этой таблице будет пять записей для одного и того же события с подробным описанием его атрибута.

http://developer.android.com/reference/android/provider/CalendarContract.Instances.html

Надеюсь, это поможет, Techfist

person Techfist    schedule 18.11.2013