我編寫了以下函數以檢索屬於具有ID「contactID」的聯繫人的一個電話號碼。在Android中使用ContactsContract檢索電話號碼 - 功能不起作用
,其功能是檢索電話號碼:
private String getContactPhone(String contactID) {
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] projection = null;
String where = ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?";
String[] selectionArgs = new String[] { contactID };
String sortOrder = null;
Cursor result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
if (result.moveToFirst()) {
String phone = result.getString(result.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if (phone == null) {
result.close();
return null;
}
result.close();
return phone;
}
result.close();
return null;
}
這個函數是怎麼叫:
ArrayList<Contact> resultContacts = new ArrayList<Contact>();
Cursor result = null;
Uri uri = ContactsContract.Data.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE,
};
String where = ContactsContract.Data.MIMETYPE+" = ? AND "+ContactsContract.CommonDataKinds.Event.TYPE+" = "+ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY;
String[] selectionArgs = new String[] {ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE};
String sortOrder = null;
result = managedQuery(uri, projection, where, selectionArgs, sortOrder);
while (result.moveToNext()) {
Long id = result.getLong(result.getColumnIndex(ContactsContract.Contacts._ID));
String phone = getContactPhone(String.valueOf(id));
...
}
...
不幸的是,這是行不通的。如果我使用從「ContactsContract.Contacts._ID」獲取的值調用此函數,則會得到空值。這是爲什麼?哪裏不對?
編輯:我用來映射Contacts._ID到CommonDataKinds.Phone.CONTACT_ID - 哪個沒有用。但是現在我將Contacts.DISPLAY_NAME映射到CommonDataKinds.Phone.DISPLAY_NAME,它突然生效 - 奇怪,不是嗎?但我更願意映射這些ID而不是顯示名稱。所以這個問題仍然是熱門話題。這可能是由於這些表中的ID不同嗎?這不是爲什麼有查找ID?
您確認只有一位聯繫人嗎? – tidbeck 2012-01-09 23:58:35
是的,因爲我試圖通過第一個查詢的結果光標遍歷每個聯繫人的電話號碼。如果我有兩個聯繫人,這對顯示名稱不起作用,對嗎? – caw 2012-01-10 17:23:07
是否有可能顯示如何獲得'contactId',以便我可以嘗試這個我的自我? – tidbeck 2012-01-10 17:31:00