Android 如何在一个请求中获取所有联系人信息,包括姓名、地址和组织名称?
我如何从一个请求中获得所有Сcontacts信息-名称、地址和组织名称? 我需要在一个请求中从联系人处获取每个联系人的此字段: 名称、街道、城市、地区、邮政编码、国家、类型(地址类型)、组织名称 我正在使用此代码,但速度非常慢(是否可以进行优化?)Android 如何在一个请求中获取所有联系人信息,包括姓名、地址和组织名称?,android,Android,我如何从一个请求中获得所有Сcontacts信息-名称、地址和组织名称? 我需要在一个请求中从联系人处获取每个联系人的此字段: 名称、街道、城市、地区、邮政编码、国家、类型(地址类型)、组织名称 我正在使用此代码,但速度非常慢(是否可以进行优化?) public static void readContacts(Context context) { long startTime = System.currentTimeMillis(); ContentResolver cr = cont
public static void readContacts(Context context) {
long startTime = System.currentTimeMillis();
ContentResolver cr = context.getContentResolver();
String[] projection = new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME };
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, projection, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// Log.v("name : " + name + ", ID : " + id);
// Get Postal Address....
String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] addrWhereParams = new String[] { id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE };
String[] tableColumns = new String[] { ContactsContract.CommonDataKinds.StructuredPostal.STREET, ContactsContract.CommonDataKinds.StructuredPostal.CITY,
ContactsContract.CommonDataKinds.StructuredPostal.REGION, ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY,
ContactsContract.CommonDataKinds.StructuredPostal.TYPE };
Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, tableColumns, addrWhere, addrWhereParams, null);
while (addrCur.moveToNext()) {
String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
int intType = 0;
try {
intType = Integer.valueOf(type);
} catch (Exception e) {
Log.e(e);
}
String orgName = "";
if (intType != Address.TYPE_OTHER) {
orgName = getOrganization(cr, id);
Log.v("id=" + id + " Organization=" + orgName);
}
Address address = new Address(id, name, orgName, street, city, state, postalCode, country, intType);
if (filterType == Address.TYPE_ALL) {
addresses.add(address);
} else if (filterType == Address.TYPE_ALL_WITH_ADDRESS && intType != Address.TYPE_OTHER) {
addresses.add(address);
} else if (filterType == Address.TYPE_HOME && intType != Address.TYPE_HOME) {
addresses.add(address);
} else if (filterType == Address.TYPE_WORK && intType != Address.TYPE_WORK) {
addresses.add(address);
}
}
addrCur.close();
}
}
Log.v((System.currentTimeMillis() - startTime) / Const.SEC + " sec");
}