android - 如何使用 android 应用程序快速获取所有联系人?
问题描述
我正在尝试获取手机的所有联系人,它正在获取但非常慢。我正在尝试快速获取。这需要时间,因为我使用了循环。我只想获取联系人姓名和电话号码。
private void getAllContacts() {
ArrayList<ContactlistModel> contactVOList = new ArrayList();
ContactlistModel contactVO;
ContentResolver contentResolver = getActivity().getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC");
if (cursor.getCount() > 0) {
while (cursor.moveToNext()) {
int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)));
if (hasPhoneNumber > 0) {
String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
contactVO = new ContactlistModel();
contactVO.setContact_name(name);
Cursor phoneCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id},
null);
if (phoneCursor.moveToNext()) {
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
contactVO.setPhone_no(phoneNumber);
}
phoneCursor.close();
Cursor emailCursor = contentResolver.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCursor.moveToNext()) {
String emailId = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
contactVOList.add(contactVO);
progressDialog.dismiss();
}
}
contactAdapter = new ContactAdapter(getContext(),contactVOList, listener);
list.setLayoutManager(new LinearLayoutManager(getActivity()));
list.setAdapter(contactAdapter);
}
}
解决方案
我从另一个问题中找到了以下代码,它对我有用。
ArrayList<Contact> contacts = new ArrayList<Contact>();
Cursor c = getActivity().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + "asc");
while (c.moveToNext()) {
String contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Contact ct = new Contact();
ct.setName(contactName);
ct.setNumber(phNumber);
contacts.add(ct);
}
c.close();
推荐阅读
- scala - Akka Streams WebSocket 发送有关任意事件的信息
- android - 从 DB 到 ImageView 背景的字符串图像引用
- python - 如何使用按钮重新启动 Python GUI 程序?
- java - 编码和解码后字符串不同
- javascript - 使用 PHP 代码在 Javascript 中显示文本失败
- c# - 二进制操作 long vs int
- arrays - 自定义单元格在 TableView 中是全白的
- laravel - 用户 $user 在 Laravel 中做什么?
- node.js - nodejs api数据打印到网页而不是控制台
- java - 如何将 ObjectGraphMeasurer.measure(object) 的结果转换为字节?