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

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? (附:我测试了俄语符号)

而不是起作用的东西:
  • COLLATE NOCASE(UNICODE,已本地化)
  • upper(),lower()

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

    最佳答案

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

    我还没有解决不区分大小写的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);
    }
    

    该提供程序执行不区分大小写的高级筛选,并且如果约束为number,则还按电话号码筛选:)

    关于使用LIKE运算符的Android不区分大小写的游标查询(适用于所有语言环境),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14863198/

    10-10 07:29