我正在尝试根据therir ID获取联系人列表的光标.我不确定如何使用带有参数数组的“IN”语句.我目前有什么导致错误.
public Cursor GetContacts(String[] ids) { ContentResolver cr = getContentResolver(); try { Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.disPLAY_NAME,ContactsContract.Contacts.HAS_PHONE_NUMBER }; String where = ContactsContract.Contacts._ID + " IN ?"; String[] selectionArgs = ids; String sortOrder = ContactsContract.Contacts.disPLAY_NAME; return cr.query(uri,projection,where,selectionArgs,sortOrder); } catch (Exception ex) { String message = ex.getMessage(); Log.e("mine","Error: " + message,ex); return null; }
错误:接近“?”:语法错误(代码1):,编译时:SELECT _id,display_name,has_phone_number FROM view_contacts WHERE((1))AND((_id IN?))ORDER BY display_name
解决方法
我没有测试这个,但我认为你需要将你的id压缩成一个逗号分隔的字符串,以便将它插入到你的查询中.
public Cursor GetContacts(String[] ids) { ContentResolver cr = getContentResolver(); try { Uri uri = ContactsContract.Contacts.CONTENT_URI; String[] projection = new String[] { ContactsContract.Contacts._ID,ContactsContract.Contacts.HAS_PHONE_NUMBER }; String where = ContactsContract.Contacts._ID + " IN (?)"; String[] selectionArgs = {StringUtils.join(ids,",")}; String sortOrder = ContactsContract.Contacts.disPLAY_NAME; return cr.query(uri,ex); return null; }