【发布时间】:2015-08-12 18:05:51
【问题描述】:
我正面临这个 sqlite 问题,我试图通过以下查询提取具有电话号码的联系人:
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"
);
问题在于,如果联系人有超过 1 个电话号码,结果将采用以下形式:
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 次查询,希望可以编写该查询以返回如下结果:
id: 451, name: Maria, photoUri: null, has_phone_number: 1, phone_number: 0700 000 000, 0800 000 000, 0900 000 000
有可能吗?
谢谢。
【问题讨论】:
-
我不认为它可能是 android db 的设置方式。将其放入列表并手动将它们与循环或其他东西合并是不可能的吗?我知道这可能不是一个好方法,但我想不出更好的方法。
-
它需要处理成千上万的联系人,我想避免做额外的处理。
-
我不了解android,但这在SQL 中并不太难。您可以对您的数据库运行原始 SQL 查询,还是仅限于使用该查询功能?
-
我只能使用该方法或任何其他将 Uri 作为参数的方法:ContactsContract.CommonDataKinds.Phone.CONTENT_URI,这将查询手机的数据库。我不能使用原始查询。
标签: android sqlite android-sqlite android-contacts