我一直在尝试通过其名称获取联系人的电子邮件,但遇到了一些困难。这是我尝试这样做的方法:
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.DISPLAY_NAME + " = ?",
new String[] { contactName }, null);
while (emailCur.moveToNext()) {
String email = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailType = emailCur
.getString(emailCur
.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
}
emailCur.close();
我经常收到例外,我做错了什么?
现在我的光标循环迭代为零。
查询电子邮件地址类似于电话号码。必须执行查询才能从数据库中获取电子邮件地址。查询存储在ContactsContract.CommonDataKinds.Email.CONTENT_URI中的URI,查询邮箱地址表。
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCur.moveToNext()) {
// This would allow you get several email addresses
// if the email addresses were stored in an array
String email = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailType = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
}
emailCur.close();
与电话查询一样,电子邮件表的字段名称也存储在ContactsContract.CommonDataKinds下。电子邮件查询在 ContactsContract.CommonDataKinds.Email.CONTENT_URI 中对 URI 执行,WHERE 子句必须与ContactsContract.CommonDataKinds.Email.CONTACT_ID字段匹配。由于可以存储多个电子邮件地址,因此循环遍历游标中返回的记录。
更多教程在这里
我认为在调用while(...(循环之前,您需要调用emailCur.moveToFirst((。
不确定你的是否有效,但我总是像这样构建我的光标循环:
while(!emailCur.isAfterLast())
{
//Do stuff with cursor
emailCur.moveToNext();
}
编辑:另外,当您说您正在通过显示名称查找联系人的电子邮件时,您是指联系人的姓名(例如John Smith(还是电子邮件地址的显示名称?在上面的循环中,您正在执行后者。
编辑#2:这是有关如何获取所有联系人的电子邮件地址(以及电话和地址(的教程。您需要稍微修改它,以便第一部分仅返回您指定的显示名称的联系人。关于根据联系人_ID返回电子邮件地址的部分仍然需要完成。
http://www.higherpass.com/Android/Tutorials/Working-With-Android-Contacts/
仅获取与您传入的显示名称匹配的联系人 ID 的修改看起来与您最初发布的内容非常相似,但您查询的 URI 和您正在与显示名称匹配的数据类型除外(现在将变为:ContactsContract.Contacts.DISPLAY_NAME
(。
从 name: 获取电子邮件:
public String getEmail(String name, Context context){
String email = null;
String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " like'%" +
name + "%'";
final String[] projection = new String[]{Email.DATA, // use
// Email.ADDRESS
// for API-Level
// 11+
Email.TYPE};
Cursor c = context.getContentResolver().query
(Email.CONTENT_URI,
projection, selection, null, null);
if (c != null && c.moveToFirst()) {
email = c.getString(0);
c.close();
}
if (email == null)
email = "Unsaved";
Log.d(TAG, "email: " + email);
return email;
}