2

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);

感谢您提供任何信息!

4

1 回答 1

2

@Andrew 的答案不正确。您错误地使用了selectionClauseselectionArgs参数。

这是你正在做的事情:

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

这个问题已经三年了,但我希望我的回答可以帮助别人。

于 2015-06-12T06:58:52.717 回答