Android Event contentResolver запрос синхронизации проблемы - PullRequest
0 голосов
/ 22 марта 2011

Я использую следующий код для извлечения данных из основного приложения календаря событий для отображения в моем приложении.

ContentResolver contentResolver = this.getContentResolver();
final Cursor cursor = contentResolver.query(Uri.parse("content://calendar/calendars"),(new String[] { "_id", "displayName", "selected" }),null, null, null);
HashSet<String> calendarIds = new HashSet<String>();
while (cursor.moveToNext()) {
  String _id = cursor.getString(0);
  String displayName = cursor.getString(1);
  Boolean selected = !cursor.getString(2).equals("0");
  calendarIds.add(_id);
}

for (String id : calendarIds) {
                    Uri.Builder builder = Uri.parse(
                            "content://calendar/instances/when").buildUpon();
                    Calendar calendar = Calendar.getInstance();
                    long now = calendar.getTimeInMillis();
                    ContentUris.appendId(builder, now
                            - ((DateUtils.DAY_IN_MILLIS) * 24));
                    ContentUris.appendId(builder, now
                            + ((DateUtils.DAY_IN_MILLIS) * 24));
                    Cursor eventCursor = contentResolver.query(builder.build(),
                            new String[] { "title", "begin", "end", "allDay",
                                    "description", "eventLocation", "dtstart",
                                    "dtend", "eventStatus", "visibility",
                                    "transparency", "hasAlarm" },
                            "Calendars._id=" + id, null,
                            "startDay ASC, startMinute ASC");
    while (eventCursor.moveToNext()) {
                    if (eventCursor != null) {
        String title = eventCursor.getString(0);
    }
}

Код работает нормально. Но иногда, если я добавляю событие в календарь и возвращаюсь в приложение, оно не показывает новое событие. Если я выйду из приложения и снова вернусь или поменяю вкладку, новое событие будет добавлено в список. Что нужно сделать, чтобы решить синхронизировать?

1 Ответ

1 голос
/ 10 апреля 2011

Когда вы возвращаетесь в свое приложение после добавления календаря, вызывается onResume ().Сделайте еще раз запрос курсора, чтобы обновить ваш интерфейс.

Кроме того, вы должны взглянуть на интерфейс ContentObserver, который настраивает интерфейс обратного вызова для уведомления об изменениях (скажем, они появляются на устройстве после сетевой синхронизации, пока вы вообще не покинули свое приложение.)

Наконец, использование CursorAdapter для управления ListView от вашего Cursor автоматически настроит ContentObserver и позаботится о большом количестве связующего кода, который вы должны были написать, чтобы продвинуться дальше.Это гораздо более автоматический способ сделать это.

...