假设我的地址簿中保存了一个联系人,名为"TomTasche",邮件地址为"stackoverflow@gmail.com".如果我只知道邮件地址,我该如何检索联系人的姓名?
我已经在这里询问了有关检索联系人昵称的类似问题,但如果我更改该代码以查询邮件,那样:
Cursor cur = context.getContentResolver().query(Email.CONTENT_URI, new String[] {Email.DISPLAY_NAME, Email.TYPE, Email.CONTACT_ID}, Email.DATA + " = " + "stackoverflow@gmail.com", null, null);
final int nameIndex = cur.getColumnIndex(Email.DISPLAY_NAME);
final int typeIndex = cur.getColumnIndex(Email.TYPE);
final int idIndex = cur.getColumnIndex(Email.CONTACT_ID);
if (cur.moveToFirst()) {
name = cur.getString(nameIndex);
type = cur.getString(typeIndex);
id = cur.getString(idIndex);
} else {
name = UNKNOWN;
}
Run Code Online (Sandbox Code Playgroud)
它强制关闭,logcat告诉我@gmail附近有语法错误.
06-22 09:21:14.260: ERROR/DatabaseUtils(110): Writing exception to parcel
06-22 09:21:14.260: ERROR/DatabaseUtils(110): android.database.sqlite.SQLiteException: near "@gmail": syntax error: , while compiling: SELECT display_name, data2, contact_id FROM view_data_restricted data WHERE (1 AND mimetype = 'vnd.android.cursor.item/phone_v2') AND (data1 = "Tom" <stackoverflow@gmail.com>)
Run Code Online (Sandbox Code Playgroud)
有趣的是它似乎很好查询.Logcat打印出联系人的姓名:
06-22 09:21:14.260: [...] AND (data1 = "Tom" <stackoverflow@gmail.com>)
Run Code Online (Sandbox Code Playgroud)
那么,我怎么能找到这个名字呢?
谢谢
汤姆
编辑:
语法错误是由缺少引号引起的,但游标仍然返回null.
使用Phone.DISPLAY_NAME而不是Email.DISPLAY_NAME两个query()和getColumnIndex()(前两行).
编辑:
电子邮件查找还有特殊的uri : Email.CONTENT_LOOKUP_URI. 它似乎更方便使用(无需在代码中放置配额或手动编写选择参数):
Uri uri = Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode("stackoverflow@gmail.com"));
Cursor cur = getContentResolver().query(uri, new String[]{Email.CONTACT_ID, mail.DISPLAY_NAME, Email.TYPE, Phone.DISPLAY_NAME}, null, null, null);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1006 次 |
| 最近记录: |