Sqlite android提取联系人与电话号码



我正面临这个sqlite问题,其中我试图提取具有以下查询的电话号码/s的联系人:

Cursor cursor = context.getContentResolver().
    query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[]{
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                ContactsContract.CommonDataKinds.Phone.NUMBER,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.PHOTO_URI
            },
            ContactsContract.Contacts.HAS_PHONE_NUMBER + ">?",
            new String [] {"0"},
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"
    );

问题是,如果联系人有多个电话号码,结果将以这种形式显示:

id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0700 000 000
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0800 000 000
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0900 000 000

,这是不希望的,因为重复的数据。

我想使只有1个查询到db,希望可以写入以返回这样的结果:

id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0700 000 000, 0800 000 000, 0900 000 000

有可能吗?

谢谢。

我不认为你想做的是可能的,这是一个使用HashMap的解决方案。它可以处理数千个条目,所以不用担心。

    Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[]{ ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts.PHOTO_URI },
            ContactsContract.Contacts.HAS_PHONE_NUMBER + ">?",
            new String [] {"0"},
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
    Map<String, List<String>> phonesPerContact = new HashMap<>();
    if (cursor.moveToFirst()) {
        do {
            String name = cursor.getString(2);
            String phone = cursor.getString(1);
            if (!phonesPerContact.containsKey(name)){
                phonesPerContact.put(name, new ArrayList<String>());
            }
            phonesPerContact.get(name).add(phone);
        } while (cursor.moveToNext());
    }
    for (String name: phonesPerContact.keySet()){
        //Do whatever you want with the contact and its list of phones
        List<String> phones = phonesPerContact.get(name);
        Log.i("test", "Name: " + name + ", Numbers: " + phones.toString());
    }

相关内容

最新更新