2012-05-14 19 views
0

使用Android聯繫人API時的問題使用Android聯繫人API時的問題

Button放置在EditText旁邊。

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
startActivityForResult(intent, Constants.PICK_CONTACT); 

上面的代碼將調用下面的方法: - else條件來處理

@Override 
    public void onActivityResult(int reqCode, int resultCode, Intent data) { 
     super.onActivityResult(reqCode, resultCode, data); 
      if (reqCode == Constants.PICK_CONTACT) { 
       if (resultCode == Activity.RESULT_OK) { 
        String contactStr = getContactInfo(data); 
        mEditTxtTo.setText(contactStr); 
       } 
      } 
} 


protected String getContactInfo(Intent intent) { 
     String contactEmail = ""; 
     Cursor cursor = managedQuery(intent.getData(), null, null, null, null); 

     while (cursor.moveToNext()) { 
      String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      // Find Email Addresses 
      Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 

      while (emails.moveToNext()) { 
       if (contactEmail.trim().length() > 0) { 
        contactEmail = new StringBuilder(contactEmail).append(IShipdocsMobileConstants.SEMICOLON_DELIMITER) 
          .append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString(); 
       } else { 
        contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
       } 
      emails.close(); 
     } 
     cursor.close(); 
     return contactEmail; 
    } 

我又多,如果當用戶點擊該按鈕,聯繫人API是使用以下代碼調用以下問題:

假設在名爲A的聯繫人中,有3個電子郵件ID。因此,在第一封電子郵件添加到contactEmail之後,在用分號分隔的第一封電子郵件後追加下一封電子郵件,該循環繼續到最後一個元素。

if (contactEmail.trim().length() > 0) { 
         contactEmail = new StringBuilder(contactEmail).append(";") 
           .append(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))).toString(); 
        } else { 
         contactEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

       } 

當多個郵件有多個聯繫人時,目前面臨的問題。

假設3個接觸是有,A,B &Ç

現在,聯繫人姓名:A具有以下的電子郵件(或多個):

[email protected] [email protected] Ç @ c.com

聯繫人姓名:B有以下電子郵件(S):

[email protected] [email protected]

如果僅添加聯繫人A,則會在contactEmail上添加兩次 [email protected]。 在我看來,上面的代碼在所有聯繫人上搜索[email protected]

所以,這是返回的最後電子郵件爲:[email protected][email protected][email protected][email protected]

任何建議/查找上的錯誤提示上面的代碼。

+0

我認爲第一步是確定是否將所有4封電子郵件都退回到您的Cursor查詢中。它將幫助您確定字符串構建循環或光標查詢是否存在問題。您可以使用'DatabaseUtils.dumpCursor(Cursor cursor)'來查詢查詢返回的整個Cursor以查找電子郵件地址。 – Gophermofur

回答

0

檢查,看看有多少次外循環:

while (cursor.moveToNext()) { 

爲接觸A.執行對於每次循環,打印出的ContactID和contactEmail這樣的:

Log.d("debug for stack overflow", contactEmail + " : " + contactId); 

這將有助於確定發生的事情。

如果您在此之後仍然需要更多幫助,請發佈我剛纔建議的結果。