Проблема с именем учетной записи Android CalendarContract

#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
};