0

CalendarContract API を使用してアカウントを選択する際に問題が発生しています。次のエラーが表示されます。

原因: android.database.sqlite.SQLiteException: near "@iancorneli": syntax error (code 1): 、コンパイル中: SELECT _id FROM Calendars WHERE (account_name = me@iancorneli.us account_type = LOCAL )

コードは次のとおりです。

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

私がどこで間違っているのかについての助けはありますか?

4

1 に答える 1

0

選択引数を間違って使用しているようです - 選択には a が必要であり?、それら?は選択引数の値に置き換えられ、必要に応じて自動的に引用符で囲まれます:

String selection = 
    CalendarContract.Calendars.ACCOUNT_NAME + 
    " =? AND " + 
    CalendarContract.Calendars.ACCOUNT_TYPE + 
    " =?"; 
String[] selArgs = 
    new String[]{
        accountName, 
        CalendarContract.ACCOUNT_TYPE_LOCAL
}; 
于 2014-07-03T17:11:37.453 に答える