7

我正在使用下面的代码来检索事件和联系人的光标,并且对于指定年份的事件来说它工作得很好。不幸的是,此查询不返回仅设置日期和月份的事件。

我已经在Google 联系人中为一些联系人生日设置了这些日期,我想知道是否需要使用 RawContacts 而不是 ContactsContract 来获取这些值?

更新:似乎检索到没有年份输入手机的事件。只有通过http://www.google.com/contacts添加的事件不会被检索。我可以在联系人应用程序中看到这些事件 - 显示为类似--05-23.

String[] projection = new String[] {
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME,
    Event.CONTACT_ID,
    Event.START_DATE,
    Event.TYPE
};

Cursor c = mContext.getContentResolver().query(
    ContactsContract.Data.CONTENT_URI,
    projection,
    ContactsContract.Data.MIMETYPE + "= ?",
    new String[] { Event.CONTENT_ITEM_TYPE },
    Event.START_DATE);
c.moveToFirst();

int nameIndex = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int dateIndex = c.getColumnIndex(Event.START_DATE);

String name, date;
while (c.moveToNext()) {
    name = c.getString(nameIndex);
    date = c.getString(dateIndex);
    Log.d(TAG, "Event for " + name + " is " + date);
}

c.close();
4

2 回答 2

0

我猜没有Event.START_DATE设置年份的事件(因为根据定义,日期将是日/月/年)。如果您将其从投影中删除并排序,它们会被检索到吗?

于 2011-07-11T23:31:28.267 回答
0

我在 Nexus S (2.3.4) 上运行,我使用了你的确切代码,我打印了所有联系人,包括没有年份的联系人。

07-19 17:08:36.847: DEBUG/test(24646): Event for Warren Upton is --12-01
07-19 17:08:36.851: DEBUG/test(24646): Event for Marion Atkins is 1934-11-24

您能否提供有关如何重现该问题的更多详细信息?

于 2011-07-19T16:23:31.327 回答