【问题标题】:Need to fetch the Contact Account name and Contact Display name from the content provider using a single cursor in Android需要在 Android 中使用单个光标从内容提供商处获取联系人帐户名称和联系人显示名称
【发布时间】:2010-09-12 15:50:58
【问题描述】:

我需要列出属于单个帐户的所有联系人的“显示名称”。

我计划使用光标适配器来填充列表,因此需要在单个内容提供程序查询中获取相应的字段(显示名称、帐户信息)。

查看联系人数据库结构,原始联系人、联系人和数据之间的单个表将无法提供这两个参数,因此需要连接。

据我所知,join 不可能从内容提供者那里获取数据。

你能告诉我解决问题的方法吗?

提前致谢。

【问题讨论】:

  • 我想知道您是否找到了解决方案。我有同样的问题,还没有找到答案。

标签: android


【解决方案1】:

这是代码(这将用accounts[0].name中每个联系人的所有姓名信息填充cur2,这只是帐户的字符串名称,它将按名字排序):

 cur2 = getContentResolver().query(Data.CONTENT_URI, DataQuery.PROJECTION, DataQuery.SELECTION, new String[] {accounts[0].name}, DataQuery.COLUMN_GIVEN_NAME + " ASC");


 private interface DataQuery {
    public static final String[] PROJECTION =
         new String[] {Data._ID, Data.MIMETYPE, Data.DATA1, Data.DATA2,
        Data.DATA3, Data.DATA4, Data.DATA5, Data.DATA6, Data.DATA7,
        Data.DATA8, Data.DATA9, Data.DATA10, Data.DATA11, Data.DATA12,
        Data.DATA13, Data.DATA14, Data.DATA15, ContactsContract.RawContacts.ACCOUNT_NAME };

    public static final int COLUMN_ID = 0;
    public static final int COLUMN_MIMETYPE = 1;
    public static final int COLUMN_DATA1 = 2;
    public static final int COLUMN_DATA2 = 3;
    public static final int COLUMN_DATA3 = 4;
    public static final int COLUMN_DATA4 = 5;
    public static final int COLUMN_DATA5 = 6;
    public static final int COLUMN_DATA6 = 7;
    public static final int COLUMN_DATA7 = 8;
    public static final int COLUMN_DATA8 = 9;
    public static final int COLUMN_DATA9 = 10;
    public static final int COLUMN_DATA10 = 11;
    public static final int COLUMN_DATA11 = 12;
    public static final int COLUMN_DATA12 = 13;
    public static final int COLUMN_DATA13 = 14;
    public static final int COLUMN_DATA14 = 15;
    public static final int COLUMN_DATA15 = 16;
    public static final int COLUMN_PHONE_NUMBER = COLUMN_DATA1;
    public static final int COLUMN_PHONE_TYPE = COLUMN_DATA2;
    public static final int COLUMN_EMAIL_ADDRESS = COLUMN_DATA1;
    public static final int COLUMN_EMAIL_TYPE = COLUMN_DATA2;
    public static final int COLUMN_GIVEN_NAME = COLUMN_DATA2;
    public static final int COLUMN_MIDDLE_NAME = COLUMN_DATA5;
    public static final int COLUMN_FAMILY_NAME = COLUMN_DATA3;
    public static final int COLUMN_WEBSITE = COLUMN_DATA1;
    public static final int COLUMN_ADDRESS_TYPE = COLUMN_DATA2;
    public static final int COLUMN_STREET_ADDRESS = COLUMN_DATA4;
    public static final int COLUMN_CITY_ADDRESS = COLUMN_DATA7;
    public static final int COLUMN_STATE_ADDRESS = COLUMN_DATA8;
    public static final int COLUMN_ZIP_ADDRESS = COLUMN_DATA9;
    public static final int COLUMN_ORGANIZATION_NAME = COLUMN_DATA1;
    public static final int COLUMN_TITLE = COLUMN_DATA4;
    public static final int COLUMN_PHOTO = COLUMN_DATA15;
    public static final int COLUMN_NOTES = COLUMN_DATA1;

    public static final String SELECTION = ContactsContract.RawContacts.ACCOUNT_NAME  + "=? and "  + Data.MIMETYPE + "='vnd.android.cursor.item/name'";

    //public static final String a = Data.
}

【讨论】:

    【解决方案2】:

    您可以在 ContactsContract.RawContacts 上选择您的帐户名称,然后在 ContactsContract.RawContacts.data 表上选择 mime 类型 CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE

    【讨论】:

    • 感谢 dco maeglin 提供的信息。但是我需要使用单个游标来获取所有三个参数,这对于 ContactsContract.RawContacts ,ContactsContract.RawContacts.data 是无法做到的:(
    猜你喜欢
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多