Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法从联系人获取正确的生日和周年数据_Android_Contactscontract - Fatal编程技术网

Android 无法从联系人获取正确的生日和周年数据

Android 无法从联系人获取正确的生日和周年数据,android,contactscontract,Android,Contactscontract,我能够获取联系人的其他信息(显示姓名、组织机构、电话号码和电子邮件地址),但无法获取该联系人的生日和周年纪念日 这是我生日时使用的代码。它确实获取了数据,但给了我错误的数据,即对所有联系人重复相同的数据 private String getBDate(String id) { String bday = null; ContentResolver cr = getContentResolver(); Uri uri = ContactsContract.Data.CONT

我能够获取联系人的其他信息(显示姓名、组织机构、电话号码和电子邮件地址),但无法获取该联系人的生日和周年纪念日

这是我生日时使用的代码。它确实获取了数据,但给了我错误的数据,即对所有联系人重复相同的数据

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

您没有在where条件下使用字符串id参数,请再次检查

E、 g private String getAnnv(String id)函数具有id的输入,但这似乎不用于ing函数,因此请将该id置于条件检查中,这样应该可以工作

e、 g


我想这对你非常有用,实际上在一些问题上,我没有找到解决方案,因此没有接受这个答案。我需要和你@Beenal谈谈。我需要相同的生日和周年纪念日从联系人名单。你有解决这个问题的办法吗??请尽快回复。如果你有解决方案,请尽快给我代码。有急事,请帮帮我。我不明白,你能解释一下吗。
ContactsContract.CommonDataKinds.Event.CONTACT_ID + "=  " +  ID
AND ContactsContract.Data.MIMETYPE + "= ? AND "