2012-07-12 71 views
0

是否可以使用自定義列名稱而不是內容提供者提供的名稱來獲取遊標?來自內容提供者的光標的自定義列名稱

我嘗試以下

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

回答

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