0

ユーザーの電話連絡先を読み取って表示するアプリケーションでオートコンプリート テキストビューを作成したいと考えています。最初にここにあるリンクを試してみましたが、問題はすべて UI スレッドで発生していたため、UI スレッドが 10 秒ほどフリーズしていました。

多くの例を見ましたが、すべて UI スレッドで発生します。

次に、グーグルでよく調べた後、cursoradapterの概念にたどり着き、ここにある非常に優れたプロジェクトを見つけましたが、問題はこの例が使用していContacts.CONTENT_URIて、各連絡先に関連付けられた電話番号を取得できないことです. uri を に変更しようとしましたContactsContract.CommonDataKinds.Phoneが、うまくいきませんでした。

次に、getitem メソッドを次のように変更しました。

@Override
public Object getItem(int position) {
    Cursor cursor = (Cursor) super.getItem(position);
    Contact contact = new Contact();

    String imageUri = cursor
            .getString(ContactsQuery.PHOTO_THUMBNAIL_DATA_COLUMN);
    Bitmap bitmap = loadContactPhotoThumbnail(imageUri,
            mDropdownItemHeight);
    if (bitmap == null) {
        bitmap = mLoadingImage;
    }

    contact.id = cursor.getLong(ContactsQuery.ID_COLUMN);

    Cursor phones = mContext.getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null,
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
                    + contact.id, null, null);
    while (phones.moveToNext()) {
        String phoneNumber = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        Log.d(TAG, "Number: " + phoneNumber);
    }

    contact.lookupKey = cursor
            .getString(ContactsQuery.LOOKUP_KEY_COLUMN);
    contact.displayName = cursor
            .getString(ContactsQuery.DISPLAY_NAME_COLUMN);
    contact.image = bitmap;

    return contact;
} 

これにより連絡先番号がわかりますが、クエリは引き続き UI スレッドで発生すると思います。バックグラウンドスレッドで発生させたい。どうすればこれを達成できますか。

また、別のアプローチがあれば教えてください。

4

1 に答える 1