2014-10-07 56 views
1

想取得今天(即当天)生日的联系人的信息。以下是我的计划。 上个月我测试的时候它正常工作,但现在它不返回正确的数据。今天有生日的联系人

Uri uri = ContactsContract.Data.CONTENT_URI; 

    String[] projection = new String[] { 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
      ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.STARRED, 
      ContactsContract.Contacts.TIMES_CONTACTED, 
      ContactsContract.CommonDataKinds.Event.START_DATE }; 

    Calendar cal = Calendar.getInstance(); 
    int month = cal.get(Calendar.MONTH); 
    int day = cal.get(Calendar.DATE); 
    String date = "'%-" + (month > 8 ? month : "0" + (month + 1)) + "-" 
      + (day > 9 ? day : "0" + day) + "'"; 

    String where = ContactsContract.Data.MIMETYPE + "= ? AND " 
      + ContactsContract.CommonDataKinds.Event.TYPE + " IN (" 
      + ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY 
      + ") AND " 
      + ContactsContract.CommonDataKinds.Event.START_DATE + " LIKE " 
      + date; 

    String[] selectionArgs = new String[] { ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE }; 
    String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME; 
    Cursor c=mContext.getContentResolver().query(uri, projection, where, 
      selectionArgs, sortOrder); 

我的光标c为空。有人能指出我在逻辑中犯的错误吗?

谢谢。

+0

尝试调试和检查每个'argument'你逝去的 – Gattsu 2014-10-07 14:09:57

+0

个月的价值来了9 – 2014-10-07 17:37:47

回答

1

错误是您处理月份值的地方。由于十月份等于9,您最终会得到字符串“%-9-08”。

你可以添加更多的逻辑来处理这种情况,但这实际上不是正确的方式来做这些事情。 试试这个:

String date = "'%-" + DateFormat.format("MM-dd",cal).toString() + "'"; 
+0

谢谢。有效。 – 2014-10-08 08:59:41