2014-02-26 81 views
0

我創建了一個應用程序,可以從Android設備的電話簿中獲取所有聯繫人。我將Gmail中的聯繫人列表同步到Android設備,並查看電話簿中的所有聯繫人。但是在運行應用程序時,無法從電話簿中獲得任何聯繫人。無法從電話簿中獲取聯繫人android

這裏是我的代碼 MainActivity.java

public class MainActivity extends Activity { 
    private TextView outputText; 
    TextView txtViewContactsInfor; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     outputText =(TextView)findViewById(R.id.textView2); 
     txtViewContactsInfor = (TextView) findViewById(R.id.txtViewContactsInfor); 
     Import_contacts_from_address_book(); 
    } 


    private void Import_contacts_from_address_book() { 
     // TODO Auto-generated method stub 
     String phoneNumber = null; 
     String email = null; 

     Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI; 
     String _ID = ContactsContract.Contacts._ID; 
     String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME; 
     String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER; 

     Uri PHONECONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
     String PHONECONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID; 
     String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER; 

     Uri EMAILCONTENT_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI; 
     String EMAILCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID; 
     String EMAIL = ContactsContract.CommonDataKinds.Email.DATA; 

     StringBuffer output = new StringBuffer(); 
     ContentResolver contentResolver = getContentResolver(); 
     Cursor cursor = contentResolver.query(CONTENT_URI, null, null, null, null); 
     System.out.println("---------------------->"+cursor.getCount()); 
     if(cursor.getCount() >0){ 
      int aa = cursor.getCount(); 
      while(cursor.moveToNext()){ 
       String contact_id = cursor.getString(cursor.getColumnIndex(_ID)); 
       String name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME)); 
       int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER))); 

       if(hasPhoneNumber > 0){ 
        output.append("\nFirst Name: "+name); 
        // Query and loop for every phone number of the contact 
        Cursor phoneCursor = contentResolver.query(PHONECONTENT_URI, null, PHONECONTACT_ID + "=?", new String[]{contact_id}, null); 
        while(phoneCursor.moveToNext()){ 
         phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER)); 
         output.append("\n Phone number: "+phoneNumber); 
        } 
        phoneCursor.close(); 
        // Query and loop for every email of the contact 

        Cursor emailCurosr = contentResolver.query(EMAILCONTENT_URI, null, EMAILCONTACT_ID+"=?",new String[]{contact_id},null); 
        while(emailCurosr.moveToNext()){ 
         email = emailCurosr.getString(emailCurosr.getColumnIndex(EMAIL)); 
         output.append("\nEmail: "+email); 
        } 
        emailCurosr.close(); 
       } 
       output.append("\n"); 
      } 
      cursor.close(); 
     } 
     outputText.setText(output.toString()); 
    } 

我調試cursor.getCount看 「544接觸」 被發現。但是 int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex(HAS_PHONE_NUMBER)));總是零。

我不知道爲什麼。

+0

你能用什麼'cursor.getColumnIndex(HAS_PHONE_NUMBER)'自行解決什麼問題,以及什麼'cursor.getString()'解決了以前的解決方案? –

回答

0

你可能有很多接觸不計其數,因爲聯繫人存儲在多個列。

我簡化,並修飾你的代碼,並進行數字來計算行,讓它在我的手機上運行:

private void readContacts() { 
    Cursor c = getContentResolver() 
      .query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    int foundWithNumber = 0; 
    int foundWithOutNumber = 0; 
    if (c.moveToFirst()) { 
     int idHasNumber = c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER); 
     do { 
      boolean hasNumber = c.getInt(idHasNumber) > 0; 
      if (hasNumber) { 
       ++foundWithNumber; 
      } else { 
       ++foundWithOutNumber; 
      } 
     } while (c.moveToNext()); 
    } 
    Log.d(TAG, "foundWithNumber: " + foundWithNumber); 
    Log.d(TAG, "foundWithOutNumber: " + foundWithOutNumber); 
    c.close(); 
} 

我的手機上的輸出繼電器是:

 MainActivity D foundWithNumber: 184 
        D foundWithOutNumber: 303 

所以,我猜測,你只是看着錯誤的行。 ;)

+0

是的,完全錯誤的行,但是當我從Gmail同步我怎麼知道正確的行在哪裏得到它。 – binhnt

+0

那麼,你只能選擇'HAS_PHONE_NUMBER = 1'的行。 – flx

0

您NEAD添加讀取觸頭允許在Android清單

android.permission.READ_CONTACTS

相關問題