Android 在单个查询中获取联系人的详细信息
大家好,我正在尝试使用ContentResolver从联系人数据库获取联系人信息,这些字段包括姓名、号码、格式化的地址、照片 一次查询中联系人的详细信息 所以基本上我需要每个联系人进行3次查询才能获得这些信息 细节 我想知道的是,有没有更简单、更有效的方法 要做到这一点 但是使用下面的代码,我得到了一个异常Android 在单个查询中获取联系人的详细信息,android,android-contacts,android-contentprovider,Android,Android Contacts,Android Contentprovider,大家好,我正在尝试使用ContentResolver从联系人数据库获取联系人信息,这些字段包括姓名、号码、格式化的地址、照片 一次查询中联系人的详细信息 所以基本上我需要每个联系人进行3次查询才能获得这些信息 细节 我想知道的是,有没有更简单、更有效的方法 要做到这一点 但是使用下面的代码,我得到了一个异常 java.lang.IllegalArgumentException: Invalid column data1 有谁能帮我找到同样的解决办法吗 Uri uri
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);
问题可能出现在
选择中。用我的方法代替你的方法
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);
您应该始终使用参数化语句
。你的方法很危险。您的URI不正确。给您
替换
ContactsContract.Contacts.CONTENT_URI;
与
感谢您的回复,但在实现您的代码java.lang.IllegalArgumentException:Invalid column data1
后,我收到了相同的异常,请立即尝试,您的uri不正确。我没有立即注意到。从查询中删除selection和SelectionAgs后,它对我有效,但它不会给我格式化的地址,而是给我电话号码。我不知道为什么。但在调试时,我发现它返回的列是“\u id,display\u name,data1,data1,data15”,它不会给出它们的原始名称。还有一个问题,它使游标的记录数减少了,我在联系人簿中有更多的记录是的,现在我正在尝试使用此URI contacts contract.commondatatypes.Phone.CONTENT\u urio获取格式化的地址您需要使用contacts contract.commondatatypes.StructuredPostal.CONTENT\u URI
感谢Vipul的回复,我已经使用了您给定的URI,在从查询中删除selection和selectionArgs后,它对我有效,但它不会给我格式化的地址来代替它,它会给我电话号码。我不知道为什么。但在调试时,我发现它返回的列是“\u id,display\u name,data1,data1,data15”,它不会给出它们的原始名称。还有一个问题,它使游标的记录数减少了,我在联系人簿中有更多的记录尝试执行游标contacts=getContentResolver().query(uri,null,null,null,null);URI是什么?ContactsContract.CommonDataTypes.Phone.CONTENT\u URI;ContactsContract.CommonDataTypes.Phone.CONTENT\u URI;它返回了大约72列,但非将给出格式化的_地址和照片
ContactsContract.CommonDataKinds.Phone.CONTENT_URI;