2012-07-30 72 views
0

我能够获取联系人的其他信息(显示名称,组织,电话号码和email_id),但无法获取该联系人的生日和周年纪念。无法从联系人获取正确的生日和周年纪念数据

这是我用于生日的代码。它取数据,但给我错误的数据,即重复所有联系人的相同数据。

private String getBDate(String id) { 
    String bday = null; 
    ContentResolver cr = getContentResolver(); 
    Uri uri = ContactsContract.Data.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Event.START_DATE }; 
    String where = ContactsContract.Data.MIMETYPE + "= ? AND " 
      + ContactsContract.CommonDataKinds.Event.TYPE + "=" 
      + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY; 
    String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE }; 
    String sortOrder = null; 
    Cursor cur = cr.query(uri, projection, where, selectionArgs, sortOrder); 
    while (cur.moveToNext()) { 
     bday = cur 
       .getString(cur 
         .getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE)); 
     Log.v("Birthday", bday); 
    } 
    cur.close(); 
    return bday; 
} 

周年纪念日的情况也是如此,这里是它的代码。在某些情况下,不会添加周年纪念,但它仍会显示来自其他联系人的数据。

private String getAnnv(String id) { 
    String annv = null; 
    ContentResolver cr = getContentResolver(); 
    Uri uri = ContactsContract.Data.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Event.START_DATE }; 
    String where = ContactsContract.Data.MIMETYPE + "= ? AND " 
      + ContactsContract.CommonDataKinds.Event.TYPE + "=" 
      + ContactsContract.CommonDataKinds.Event.TYPE_ANNIVERSARY; 
    String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE }; 
    // String sortOrder = null; 
    Cursor cur = cr.query(uri, projection, where, selectionArgs, null); 
    while (cur.moveToNext()) { 
     annv = cur 
       .getString(cur 
         .getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE)); 
     Log.v("Anniversary", annv); 
    } 
    cur.close(); 
    return annv; 
} 
+0

我认为这将是对你非常有用 http://stackoverflow.com/questions/2482631/how-to-get-contacts-in-order-of-their-即将到来的生日 – Ramkumar 2012-07-30 13:23:14

+0

其实在一些问题中,我没有找到解决方案,所以没有接受答案。 – Beenal 2012-08-01 09:35:20

+0

我需要和你谈谈@Beenal。我需要联系人列表中的相同出生日期和周年日期。你有这个解决方案?请尽可能尽快回复。如果你有解决方案,那么请尽快给我代码。它的紧急请帮助我。 – 2016-07-23 11:51:24

回答

0

你没有使用字符串ID参数在哪里条件,所以请再次检查。

E,g private String getAnnv(String id)函数为ID输入,但似乎没有使用withing函数,所以请把这个ID在条件检查,这应该工作。

ContactsContract.CommonDataKinds.Event.CONTACT_ID + "= " + ID 
AND ContactsContract.Data.MIMETYPE + "= ? AND " 
+0

我不明白,请你解释一下。 – Beenal 2012-08-01 05:21:54

+0

回答更新请看现在... – 2012-08-01 07:58:44

相关问题