大家好我想尝试使用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);
答案 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;