嗨我目前在做联系,如果我从接触* (电子邮件,电话号码和联系人姓名) *获取详细信息相关项目和它well.But的问题是,它需要很长的时间来获取联系方式(包括来自社交网站同步的1000多名联系人)包括。因此,我为此设置了一个Asynchronous Task
,并且它的表现不错,但问题是由于很长时间才能完成提取过程,当我按后退按钮它在异步任务期间崩溃。我的问题不会崩溃为什么这个提取的联系人花费了大量的时间。有办法让contact
更快。我的代码来获得接触的细节低于获取联系人详细信息花费大量的时间在android?
public void readContact() {
contactname = new ArrayList<String>();
contactnumber = new ArrayList<String>();
companyname_one = new ArrayList<String>();
contactemail = new ArrayList<String>();
people = getContentResolver().query(
ContactsContract.Contacts.CONTENT_URI, null, null, null,
PhoneLookup.DISPLAY_NAME);
while (people.moveToNext()) {
int nameFieldColumnIndex = people
.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
if (contact == null) {
contactname.add("No contact Set");
} else {
contactname.add(contact);
}
String szId = people.getString(people
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
cursor_one = getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "='"
+ szId + "'", null, null);
if (cursor_one.moveToNext()) {
String number = cursor_one.getString(cursor_one
.getColumnIndex(Phone.NUMBER));
contactnumber.add(number);
cursor_one.close();
} else {
contactnumber.add("no number");
cursor_one.close();
}
emails_value = getContentResolver().query(
Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "='"
+ szId + "'", null, null);
if (emails_value.moveToNext()) {
email_sorting = emails_value.getString(emails_value
.getColumnIndex(Email.DATA));
checkAll();
} else {
contactemail.add("no email");
emails_value.close();
}
}
people.close();
System.out.println("noz " + contactnumber);
System.out.println("name" + contactname);
System.out.println("email" + contactemail);
System.out.println("noz size " + contactnumber.size());
System.out.println("name size " + contactname.size());
System.out.println("contactemail size " + contactemail.size());
}
的checkAll()
方法给出的是电子邮件的图案匹配如下
public boolean checkAll() {
boolean chkAll = true;
Pattern p1 = Pattern.compile("[email protected]+\\.[a-z]+");
Matcher m1 = p1.matcher(email_sorting.trim());
if (!m1.matches()) {
contactemail.add("no email");
contactemail_sort.add("no email");
emails_value.close();
chkAll = false;
} else {
contactemail.add(email_sorting);
contactemail_sort.add(email_sorting);
emails_value.close();
chkAll = true;
}
return chkAll;
}
好的建议,但你能告诉我一个自定义CursorAdapter的例子 – Ramz 2012-08-16 18:44:17
当然。当我有一段时间的时候,我会编辑一个。 – Stuporman 2012-08-16 19:27:27
okey谢谢,请尽快发布:) – Ramz 2012-08-16 19:41:17