4

大家好,我正在尝试使用 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);
4

2 回答 2

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 很糟糕。

于 2012-06-14T10:31:23.660 回答
1

干得好

代替

ContactsContract.Contacts.CONTENT_URI;

ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
于 2012-06-14T10:43:39.580 回答