2010-06-22 89 views
1

假設我有一個聯繫人保存在我的地址簿中,名爲「TomTasche」,郵件地址爲「[email protected]」。如果我只知道郵件地址,我如何檢索聯繫人的姓名?解析郵件地址到聯繫人的姓名

我已經問過有關檢索聯繫人的暱稱here一個類似的問題,但如果我改變代碼來查詢郵件,這樣的:

Cursor cur = context.getContentResolver().query(Email.CONTENT_URI, new String[] {Email.DISPLAY_NAME, Email.TYPE, Email.CONTACT_ID}, Email.DATA + " = " + "[email protected]", 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; 
} 

它強制關閉並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" <[email protected]>) 

有趣的是,它似乎查詢罰款。 Logcat打印出聯繫人的名字:

06-22 09:21:14.260: [...] AND (data1 = "Tom" <[email protected]>) 

那麼,我該如何找回名字呢?

感謝
湯姆

編輯:

語法錯誤是由缺少引號引起的,但無論如何光標返回null。

回答

6

Phone.DISPLAY_NAME使用,而不是在兩個query()getColumnIndex()(第一2行)Email.DISPLAY_NAME

編輯:

還有特別的URI電子郵件查找:Email.CONTENT_LOOKUP_URI。 它似乎更方便使用(無需配額或手動組成選擇參數,如在您的代碼中):

Uri uri = Uri.withAppendedPath(Email.CONTENT_LOOKUP_URI, Uri.encode("[email protected]")); 
Cursor cur = getContentResolver().query(uri, new String[]{Email.CONTACT_ID, mail.DISPLAY_NAME, Email.TYPE, Phone.DISPLAY_NAME}, null, null, null); 
+0

謝謝你的工作! – TomTasche 2010-06-23 07:24:51

+0

加1表示Phone.DISPLAY_NAME有效,而Email.DISPLAY_NAME則不可以。 – 2013-10-18 18:35:18

相關問題