查询联系人时抛出java.lang.IllegalArgumentException错误求助
解决java.lang.IllegalArgumentException: Invalid column data1异常
你遇到的这个问题确实是projection参数的问题——你把来自两个不同ContactsContract表的字段混在一起用了,导致系统找不到对应的列。
问题根源
ContactsContract.PhoneLookup 和 ContactsContract.CommonDataKinds.Phone 属于不同的数据源表:
PhoneLookup是用于快速通过电话号码反向查找联系人的专用表,它的字段集合和CommonDataKinds.Phone并不完全兼容- 你在projection里同时混用了
PhoneLookup.DISPLAY_NAME和CommonDataKinds.Phone的字段,当查询的URI对应其中一个表时,另一个表的字段就会被判定为无效列(报错里的data1其实是CommonDataKinds.Phone.NUMBER对应的底层列名,当用PhoneLookup的URI查询时,系统找不到这个列)
修正方案
根据你的需求(获取联系人姓名、电话、ID),应该统一使用ContactsContract.CommonDataKinds.Phone相关的字段和对应的URI,修正后的代码如下:
public List<ContactModel> getContacts(Context ctx) { List<ContactModel> list = new ArrayList<>(); // 统一使用CommonDataKinds.Phone下的字段 String[] projection = { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.CONTACT_ID }; // 查询的URI要对应CommonDataKinds.Phone的CONTENT_URI Cursor cursor = ctx.getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, null ); if (cursor != null && cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex(projection[0])); String number = cursor.getString(cursor.getColumnIndex(projection[1])); long contactId = cursor.getLong(cursor.getColumnIndex(projection[2])); ContactModel model = new ContactModel(); // 给model赋值... list.add(model); } while (cursor.moveToNext()); cursor.close(); } return list; }
额外说明
如果你确实需要使用PhoneLookup(比如通过特定电话号码反向查询联系人信息),那projection里只能用PhoneLookup类下的字段,示例如下:
String targetNumber = "13xxxxxxxxx"; String[] projection = { ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID, ContactsContract.PhoneLookup.NUMBER }; // 对应的查询URI是PhoneLookup.CONTENT_FILTER_URI拼接目标号码 Uri lookupUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(targetNumber)); Cursor cursor = ctx.getContentResolver().query(lookupUri, projection, null, null, null);
内容的提问来源于stack exchange,提问作者user7523193
相关产品推荐
相关产品推荐

