获取联系人字符串数组
问题描述:
我试图从我的手机所有联系人(姓名和电话号码)到一个字符串数组。我尝试过用典但是我得到一个错误这部分...获取联系人字符串数组
Cursor contacts = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
String aNameFromContacts[] = new String[contacts.getCount()];
String aNumberFromContacts[] = new String[contacts.getCount()];
int ij = 0;
int nameFieldColumnIndex = contacts.getColumnIndex(PhoneLookup.DISPLAY_NAME);
int numberFieldColumnIndex = contacts.getColumnIndex(PhoneLookup.NUMBER);
while(contacts.moveToNext()) {
String contactName = contacts.getString(nameFieldColumnIndex);
aNameFromContacts[ij] = contactName ;
String number = contacts.getString(numberFieldColumnIndex);
aNumberFromContacts[ij] = number ;
ij++;
contacts.close();
以下是错误:
08-31 18:09:09.031: E/CursorWindow(16317): Failed to read row 0, column -1 from a CursorWindow which has 109 rows, 44 columns.
我怎样才能解决这个问题还是有更好的办法?
答
始终使用contacts.getColumnIndexOrThrow(PhoneLookup.NUMBER);
,而不是contacts.getColumnIndex(PhoneLookup.NUMBER);
所以,你可以得到确切的错误信息。在这种情况下,它是:
java.lang.IllegalArgumentException: column 'number' does not exist
意味着你正在试图获得列的索引中不存在这样的getColumnIndex方法返回为空预期。
下面这段代码会给你想要的东西:
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
String aNameFromContacts[] = new String[cur.getCount()];
String aNumberFromContacts[] = new String[cur.getCount()];
int j = 0;
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String name = cur
.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
if (("1")
.equals(cur.getString(cur
.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER)))) {
Cursor pCur = cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID
+ " = ?", new String[] { id }, null);
int i = 0;
int pCount = pCur.getCount();
String[] phoneNum = new String[pCount];
String[] phoneType = new String[pCount];
while (pCur.moveToNext()) {
phoneNum[i] = pCur
.getString(pCur
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneType[i] = pCur
.getString(pCur
.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.TYPE));
i++;
}
if (phoneNum.length > 0) {
aNumberFromContacts[i] = phoneNum[0];
aNameFromContacts[j] = name;
Log.d("name = ", "" + name +", phoneNumber = " + phoneNum[0]);
}
}
j++;
}
}
也试图理解这个代码,这样你就会明白它是如何工作的,什么是PHONENUM和PHONETYPE。
PS:可根据需要对此代码进行优化以获得更好的性能。
谢谢你很多:) – user3339279 2014-09-01 15:44:32