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)

動作しないもの:

  • 照合ノード(Unicode、ローカライズ)
  • upper()、lower()

ヘルプやアドバイスが必要です。ありがとうございました。

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 に答える