8

我正在尝试进行过滤查询:

public Cursor runQuery(CharSequence constraint) {
        return getActivity().getContentResolver().query(
                Phone.CONTENT_URI,
                new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone.TYPE, Phone._ID },
                Phone.DISPLAY_NAME + " LIKE '" + constraint + "%'",// <-- problem here
                null, 
                Phone.DISPLAY_NAME);
    }

但是 LIKE 运算符以区分大小写的方式用于非 ascii 字符(如 SQLite 文档所述)。有没有办法让 LIKE 不区分大小写?(ps我测试俄罗斯符号)

不起作用的事情:

  • 整理 NOCASE(UNICODE,本地化)
  • 上(),下()

需要帮助或建议。谢谢你。

4

1 回答 1

3

更新:我在这种情况下的解决方案

我还没有解决不区分大小写的 LIKE 问题,但我找到了适合我的具体情况的解决方案,而且效果比我预期的还要好 :) 可能对你有用。因此,要按名称过滤带有电话的联系人,请使用 Phone.CONTENT_FILTER_URI

@Override
public Cursor runQuery(CharSequence constraint) {
    return mContext.getContentResolver().query(
            Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(constraint.toString())),
            //PROJECTION
            new String[] {
                    Phone._ID, 
                    Phone.DISPLAY_NAME,
                    Phone.NUMBER,
                    Phone.TYPE,
                    Phone.PHOTO_ID},
            //WHERE
            ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", 
            null,
            //ORDER BY
            null);
}

此提供程序执行不区分大小写的高级过滤,如果约束为数字,还按电话号码过滤:)

于 2014-03-19T09:42:08.570 回答