2010-07-07 30 views
2

我的Android應用程序需要檢索有關聯繫人的信息(即電話號碼和姓名)。我使用getContentResolver().query()編寫了一些代碼在結果中,我看到名稱是被退回,以及其他信息,例如,我上次聯繫該人時,但不是電話號碼。我究竟做錯了什麼?在我的Android應用程序中無法獲取電話號碼

代碼:

Log.w("MyApp", "requesting " + phonesUri.toString()); 
Cursor contactCursor = context.getContentResolver().query(person, null, null, null, null); 
contactCursor.moveToFirst(); 

for (int i = 0; i < contactCursor.getColumnCount(); i ++) { 
    Log.w("MyApp", contactCursor.getColumnName(i) + ": " + contactCursor.getString(i)); 
} 

它輸出這樣的:

W/MyApp (21477): requesting content://contacts/people/169/phones 
W/MyApp (21477): times_contacted: 6 
W/MyApp (21477): custom_ringtone: null 
W/MyApp (21477): primary_organization: null 
W/MyApp (21477): phonetic_name: 
W/MyApp (21477): status: null 
W/MyApp (21477): label: null 
W/MyApp (21477): number: null 
W/MyApp (21477): type: null 
W/MyApp (21477): mode: null 
W/MyApp (21477): last_time_contacted: 1278113641980 
W/MyApp (21477): display_name: (name removed for privacy) 
W/MyApp (21477): im_handle: null 
W/MyApp (21477): _id: 169 
W/MyApp (21477): number_key: null 
W/MyApp (21477): starred: 0 
W/MyApp (21477): primary_email: null 
W/MyApp (21477): name: (name removed for privacy) 
W/MyApp (21477): primary_phone: null 
W/MyApp (21477): im_account: null 
W/MyApp (21477): notes: 
W/MyApp (21477): im_protocol: null 
W/MyApp (21477): send_to_voicemail: 0 

回答

3
  1. 你不需要編寫自己的迭代方法來打印屏幕/登錄,在一個叫DatabaseUtils.dumpCursorToString(cursor);光標獲取原始輸出的字符串表示形式。

  2. 電話號碼存儲在自己的表中,需要單獨查詢。要查詢電話號碼錶,請使用存儲在SDK變量ContactsContract.CommonDataKinds.Phone.CONTENT_URI中的URI。使用WHERE條件來獲取指定聯繫人的電話號碼。

    if (Integer.parseInt(cur.getString(
          cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
         Cursor pCur = cr.query(
        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
        null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
        new String[]{id}, null); 
        while (pCur.moveToNext()) { 
        // Do something with phones 
        } 
        pCur.close(); 
    } 
    

執行鍼對Android通訊錄SQLite數據庫第二查詢。電話號碼將根據存儲在ContactsContract.CommonDataKinds.Phone.CONTENT_URI中的URI進行查詢。聯繫人ID作爲ContactsContract.CommonDataKinds.Phone.CONTACT_ID存儲在電話表中,WHERE子句用於限制返回的數據。

查看本教程Working With Android Contacts

+0

謝謝。看起來舊的Eclair之前的東西不再可靠地工作了。一旦我切換到ContactsContract,事情就開始奏效。 – 2010-07-07 21:23:17

相關問題