在单个查询中获取联系人的详细信息

时间:2012-06-14 10:23:29

标签: android android-contacts android-contentprovider

大家好我想尝试使用ContentResolver从联系人数据库获取联系信息,这些字段想要获取名称,编号,FORMATTED_ADDRESS,PHOTO 单个查询中联系人的详细信息。

所以基本上我需要为每个联系人进行3次查询才能获得这些查询 细节。

我想知道的是,是否有更简单,更有效的方式 实现这一点。

但是使用下面的代码我会遇到异常。

java.lang.IllegalArgumentException: Invalid column data1

任何人都可以帮我找到相同的解决方案。

Uri uri                = ContactsContract.Contacts.CONTENT_URI;
String[] projection    = new String[] { ContactsContract.Contacts._ID,
                                        ContactsContract.Contacts.DISPLAY_NAME,
                                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                                        ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS,
                                        ContactsContract.CommonDataKinds.Photo.PHOTO};
String selection       = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;
String sortOrder       = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

Cursor contacts          = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

2 个答案:

答案 0 :(得分:4)

问题可能出在selection。用我的方法替换你的方法。

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = new String[] { ContactsContract.Contacts._ID,
                                        ContactsContract.Contacts.DISPLAY_NAME,
                                        ContactsContract.CommonDataKinds.Phone.NUMBER,
                                        ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS,
                                        ContactsContract.CommonDataKinds.Photo.PHOTO};
String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER  + " = ?";
String[] selectionArgs = { String.valueOf(1) }; 
String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

Cursor contacts = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

您应始终使用parametrized statements。你的方法很危险。你的URI很糟糕。

答案 1 :(得分:1)

你去吧

替换

ContactsContract.Contacts.CONTENT_URI;

ContactsContract.CommonDataKinds.Phone.CONTENT_URI;