CalendarContract.Events._ID отсутствует в Android 5.0

Мое приложение запрашивает определенное событие в CalendarContract.Events с помощью Events._ID, Это работало хорошо, пока не попытался запустить его на устройстве 5.0, теперь я получаю исключение

01-12 17:28:50.525: E/Unknown Source(18499): android.database.sqlite.SQLiteException:
    no such column: CalendarContract.Events._ID (code 1): ,
    while compiling:
        SELECT _id, account_type, title, organizer, description, eventLocation,
            hasAlarm, calendar_id
        FROM view_events
        WHERE (lastSynced = 0 AND (CalendarContract.Events._ID=1))

Опрос всех столбцов в Events действительно не возвращается _ID, Любая идея, почему это было удалено или это ошибка? Кажется, я больше не могу найти, чтобы однозначно идентифицировать события.

Вот мой запрос:

String[] projection = new String[]{Events._ID, Events.ACCOUNT_TYPE, Events.TITLE,
        Events.ORGANIZER, Events.DESCRIPTION, Events.EVENT_LOCATION, Events.HAS_ALARM,
        Events.CALENDAR_ID};

Cursor cursor = context.getContentResolver().query(EVENTS_CONTENT_URI, projection,
         "CalendarContract.Events._ID=" + eventId, null, null);

Спасибо за любую информацию!

1 ответ

Решение

Ответ @Andrew не правильный. Вы неправильно используете selectionClause и selectionArgs параметры.

Вот что вы делаете:

Cursor cursor = context.getContentResolver().query(EVENTS_CONTENT_URI, projection,
    CalendarContract.Events._ID + "=" + eventId, null, null);

И вот что вы должны сделать:

Cursor cursor = context.getContentResolver().query(EVENTS_CONTENT_URI, projection,
    CalendarContract.Events._ID + " = ?", new String[]{eventId}, null);

EventId должен быть передан в пределах selectionArgs так что contentResolver может построить оператор запроса для вас, цепочки selectionArgs и подставляя их в? символ в selectionClause параметр.

Вопросу три года, но я надеюсь, что мой ответ может помочь кому-то еще.

Другие вопросы по тегам