1

コンテンツ プロバイダが提供するものではなく、カスタムの列名でカーソルを取得することはできますか?

私は次のことを試します

   private final String[] PROJ_CONTACT = {
                    ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY + " AS " + Golfer.COLUMN_NAME,
                    ContactsContract.CommonDataKinds.Email.ADDRESS + " AS " + Golfer.COLUMN_EMAIL
            };

ContentResolver resolver = getActivity().getContentResolver();
Cursor cursor = resolver.query(
                    ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                    PROJ_CONTACT,
                    SELECTION_BY_ID,
                    new String[] {Long.toString(id)},
                    null);

しかし、私は例外を受けています07-12 17:02:01.733: E/AndroidRuntime(7569): java.lang.IllegalArgumentException: Invalid column display_name AS name

4

1 に答える 1

0

考えられる解決策は、列名を再マップするカーソルラッパーを作成し、コンテンツプロバイダーから返されるカーソルの代わりにそれを使用することですが、より良い解決策があるのではないでしょうか。

private class ContactCursor extends CursorWrapper {
    public ContactCursor(Cursor cursor) {
        super(cursor);
    }

    @Override
    public int getColumnIndex(String columnName) {
        if (Golfer.COLUMN_NAME.equalsIgnoreCase(columnName)){
            columnName = ContactsContract.CommonDataKinds.Email.DISPLAY_NAME_PRIMARY;
        }

        if (Golfer.COLUMN_EMAIL.equalsIgnoreCase(columnName)){
            columnName = ContactsContract.CommonDataKinds.Email.ADDRESS;
        }               

        return super.getColumnIndex(columnName);
    }
}
于 2012-07-12T22:15:22.207 に答える