3

現在、連絡先データベースで検索を実行しようとしていますが、渡す値が連絡先の表示名と一致する場合、一致する連絡先の数でカーソルを返したいと考えています。

現在、これは国際文字を除いて正常に機能します。EditText から取得した CharSequence である制約を使用して、現在私のコードがどのように見えるかを次に示します。

String[] PROJECTION = new String[] {
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME,
                ContactsContract.Contacts.HAS_PHONE_NUMBER,
        };

String sortOrder = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

public Cursor runQuery(CharSequence constraint) {

        String SELECTION = "UPPER(" + ContactsContract.Contacts.DISPLAY_NAME + ")" 
            + " LIKE UPPER('%" + constraint+ "%') " + "and " + ContactsContract.Contacts.DISPLAY_NAME + " IS NOT NULL"
         + " AND " + ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
                    PROJECTION, SELECTION, null, sortOrder);

    return cur; 
}

私が言ったように、検索で大文字と小文字を区別しないようにしたいので、ユーザーは正確な名前を入力する必要がありません。通常の英語の名前では問題なく動作しますが、国際文字が導入されると検索で大文字と小文字が区別されます。

私は、SQLite が Android にはないこの作業を行うために ICU アドオンが必要であることを示唆するいくつかの調査を行いました。または、データベースに挿入するときに照合を使用します。ただし、連絡先のコンテンツ プロバイダーからのみ読み取るため、これはオプションではありません。

上記のコードで大文字と小文字を区別せずに国際文字を操作する方法を知っている人はいますか?

4

0 に答える 0