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

1 に答える 1

0

where条件でStringidperameterを使用していないので、もう一度確認してください。

たとえば、private String getAnnv(String id)関数にはIDの入力がありますが、これは関数では使用されていないようです。そのIDを条件チェックに入れてください。これで機能するはずです。

例えば

ContactsContract.CommonDataKinds.Event.CONTACT_ID + "=  " +  ID
AND ContactsContract.Data.MIMETYPE + "= ? AND "
于 2012-07-30T13:21:49.517 に答える