2016-09-01 51 views
0

私は電話番号とメールアドレスの連絡先を読むには、以下のコードを使用しています!すべての連絡先を正常に読み取りますが、連絡先に電子メールがない場合は、前の連絡先の電子メールが表示されます。連絡先の電話番号とメールアドレス

下の画像とまったく同じです!何か案は?? これはあなたの変数のスコープに関係している

public void getContacts() { 

    contactList = new ArrayList<Contacts>(); 
    String phoneNumber = null; 
    String email = null; 
    ContentResolver contentResolver = getContentResolver(); 


    String name = null; 

    cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    // Iterate every contact in the phone 
    if (cursor.getCount() > 0) { 
     counter = 0; 

     while (cursor.moveToNext()) { 

      // Update the progress message 
      updateBarHandler.post(new Runnable() { 
       public void run() { 
        pDialog.setMessage("Reading contacts : " + counter++ + "/" + cursor.getCount()); 
       } 
      }); 

      String contact_id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
      name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 


      int hasPhoneNumber = Integer.parseInt(cursor.getString(
        cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); 
      if (hasPhoneNumber > 0) { 

       //This is to read multiple phone numbers associated with the same contact 
       Cursor phoneCursor = contentResolver.query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
         new String[]{contact_id}, null); 

       while (phoneCursor.moveToNext()) { 
        phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(
          ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       } 
       phoneCursor.close(); 
      } 

      Cursor emailCursor = contentResolver.query(
        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
        ContactsContract.CommonDataKinds.Email.CONTACT_ID 
        + " = ?", new String[]{contact_id}, null); 

      while (emailCursor.moveToNext()) { 

       email = emailCursor.getString(emailCursor.getColumnIndex(
         ContactsContract.CommonDataKinds.Email.DATA)); 
      } 

      emailCursor.close(); 
      contact = new Contacts(); 

      contact.setContactFName(name); 
      contact.setContactPhone(phoneNumber); 
      contact.setContactEmail(email); 

      contactList.add(contact); 
     } 

     // ListView has to be updated using a ui thread 
     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       adapter = new ImportContactAdapter 
         (ImportContactActivity.this, R.layout.custom_import_contact, contactList); 
       mListView.setAdapter(adapter); 
      } 
     }); 
     // Dismiss the progressbar after 500 millisecondds 
     updateBarHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       pDialog.cancel(); 
      } 
     }, 500); 
    } 
} 

enter image description here

+0

[連絡先の名前、番号、電子メールのIDにアクセスする]の可能な複製(http://stackoverflow.com/questions/10993283/accessing-the-contact-name-number-and-email-id) –

答えて

0

事前にありがとうございます。あなたのの外にあなたのString emailを宣言します。連絡先に電子メールがない場合、while (emailCursor.moveToNext())String emailの値を更新しません。つまり、contact.setContactEmail(email);を実行すると、前の連絡先の値が残ります。

関連する問題