#android #calendar #calendarcontract
#Android #Календарь #calendarcontract
Вопрос:
У меня возникла проблема с выбором учетной записи с использованием API CalendarContract. Я получаю следующую ошибку:
Вызвано: android.database.sqlite.Исключение SQLiteException: рядом с «@iancorneli»: синтаксическая ошибка (код 1): , при компиляции: ВЫБЕРИТЕ _id ИЗ календарей, ГДЕ (account_name = me@iancorneli.us account_type = ЛОКАЛЬНЫЙ)
Код выглядит следующим образом:
private void getAccounts() {
AccountManager manager = AccountManager.get(context);
Account[] accounts = manager.getAccountsByType("com.google");
for (Account account : accounts) {
accountName = account.name;
accountType = account.type;
break;
}
}
private long getCalendarID() {
getAccounts();
String[] projection = new String[]{CalendarContract.Calendars._ID};
String selection =
CalendarContract.Calendars.ACCOUNT_NAME
" = " accountName " "
CalendarContract.Calendars.ACCOUNT_TYPE
" = " CalendarContract.ACCOUNT_TYPE_LOCAL " ";
String[] selArgs =
new String[]{
CalendarContract.Calendars.ACCOUNT_NAME,
CalendarContract.ACCOUNT_TYPE_LOCAL
};
Cursor cursor = context.getContentResolver().query(
CalendarContract.Calendars.CONTENT_URI,
projection,
selection,
selArgs,
null
);
if (cursor.moveToFirst()) {
return cursor.getLong(0);
}
return -1;
}
Любая помощь относительно того, где я ошибаюсь?
Ответ №1:
Похоже, вы неправильно используете аргументы выбора — в вашем выборе должно быть ?
, и они ?
заменяются значениями из аргументов выбора, при необходимости автоматически заключая их в кавычки:
String selection =
CalendarContract.Calendars.ACCOUNT_NAME
" =? AND "
CalendarContract.Calendars.ACCOUNT_TYPE
" =?";
String[] selArgs =
new String[]{
accountName,
CalendarContract.ACCOUNT_TYPE_LOCAL
};