我想在应用程序中创建一个自动完成的文本视图,它将读取并显示用户的电话联系人。首先我尝试了这里给出的链接,但问题是 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 线程中。我希望它发生在后台线程中。我如何做到这一点。
还请告知是否有替代方法。