我正在尝试基于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;
}
Run Code Online (Sandbox Code Playgroud)
错误:接近"?":语法错误(代码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.DISPLAY_NAME,
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, projection, where, selectionArgs, sortOrder);
}
catch (Exception ex)
{
String message = ex.getMessage();
Log.e("mine", "Error: " + message, ex);
return null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |