访问联系人数据

时间:2010-09-03 00:42:27

标签: android contacts contactscontract

唉我的电话簿中有大约500个联系人,出于某种原因,在与雷鸟同步之后,显示名称是随机的,最先是......最后一个。所以我想我会把一个快速的小部件放在一起,只是重新做我的显示名称,最后,先。我使用的代码如下,但我没有得到最后/第一个值。游标中的键存在(data1,data2),但值分别为“1”和null。任何想法?

Cursor cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, null);

        while (cursor.moveToNext() != false) {

        String id = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

        String fname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));

        String lname = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));

        if (lname != null && lname.length() > 0) {

              String sDName = lname + "," + fname;

              ContentValues values = new ContentValues();

              values.put(ContactsContract.Contacts.DISPLAY_NAME, sDName);

              getContentResolver().update(ContactsContract.Data.CONTENT_URI, values, ContactsContract.Contacts._ID+"=", new String[] {id});

        }

        }

1 个答案:

答案 0 :(得分:0)

ContactsContract.Data包含共享表格中的所有各种类型的信息,如邮政地址,电话号码,电子邮件,网站,照片等。

您必须过滤掉包含您感兴趣的信息的行。

在查询中,添加一个WHERE子句:

query(ContactsContract.Data.CONTENT_URI,  Data.MIMETYPE + "=?", 
    new String[]{StructuredName.CONTENT_ITEM_TYPE}, null, null);

请参阅ContactsContract.Data

的文档