2012-06-28 34 views
1

我試圖訪問在Emulator.I所有聯繫人的聯繫方式得到了其他details.There的訪問所需的解決方案是一個問題,當使用下面的訪問電話和電子郵件type.I代碼來獲取電話類型和電子郵件類型。該應用程序正在運行,沒有編譯錯誤。聯繫方式來恰當的順序

完整代碼

public class GetAllDatas extends Activity { 

ListView lvItem; 
private Button btnAdd; 
String Ptype, Etype; 
int contactPhoneType; 

String displayName="", emailAddress="", phoneNumber=""; 
ArrayList<String> contactlist=new ArrayList<String>(); 
ArrayAdapter<String> itemAdapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    lvItem = (ListView)this.findViewById(R.id.lvitems); 
    btnAdd = (Button)this.findViewById(R.id.btnAddItem); 

    itemAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactlist); 
    lvItem.setAdapter(itemAdapter); 

    btnAdd.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      readContacts(); 
     } 
    }); 

} 

private void readContacts() 
{ 
    ContentResolver cr =getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 


    while (cursor.moveToNext()) 
    { 
     displayName = "" ; 
     ArrayList<String> phoneNumber = new ArrayList<String>(); 
     ArrayList<String> emailAddress = new ArrayList<String>(); 

     displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));  
     String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 

     /*     Email     */ 

     Cursor emails = cr.query(Email.CONTENT_URI,null,Email.CONTACT_ID + " = " + id, null, null); 
     while (emails.moveToNext()) 
     { 
      emailAddress.add(emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 

      int contactPhoneType = emails.getInt(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 



      switch(contactPhoneType){ 
       case ContactsContract.CommonDataKinds.Email.TYPE_HOME: 
        Etype = "Home"; 
        break; 
       case ContactsContract.CommonDataKinds.Email.TYPE_WORK: 
        Etype = "Work"; 
        break; 
       case ContactsContract.CommonDataKinds.Email.TYPE_MOBILE: 
        Etype = "Mobile"; 

        break; 
       case ContactsContract.CommonDataKinds.Email.TYPE_OTHER: 
        Etype = "Other"; 
        break; 
      }     
     } 



     emails.close(); 


     /*   Phone Number and Type */ 

     if(Integer.parseInt(cursor.getString(cursor.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()) 
      { 
       phoneNumber.add(pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 

        contactPhoneType = pCur.getInt(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 


       switch(contactPhoneType){ 
        case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
         Ptype = "Home"; 
         break; 
        case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
         Ptype = "Work"; 
         break; 
        case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: 
         Ptype = "Mobile"; 
         break; 
        case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER: 
         Ptype = "Other"; 
         break; 
       }     
      } 



      pCur.close(); 
     } 

int phoneNumberCount = phoneNumber.size(); 
int emailCount = emailAddress.size(); 

// Add arraylist data to contactlist.. 

if(phoneNumberCount > emailCount) { 

    for (int i=0; i<phoneNumberCount; i++) 
     { 
     if(emailCount>i) 
      { 
      contactlist.add(displayName + " , " + Ptype + " , " + phoneNumber.get(i) + " , " + Etype + " , " + emailAddress.get(i) + "\n");  
      } 
     else 
     { 
      contactlist.add(displayName + " , " + Ptype + " , " + phoneNumber.get(i) + " , " + " , " + "\n"); 
     } 
     } 
    } 
    else 
     { 
     for (int i=0; i<emailCount; i++) 
     { 
     if(phoneNumberCount>i) 
      { 
      contactlist.add(displayName + " , " + Ptype + " , " + phoneNumber.get(i) + " , " + Etype + " , " + emailAddress.get(i) + "\n"); 
      } 
     else 
     { 
      contactlist.add(displayName + " , " + " , " + " , " + Etype + " , " + emailAddress.get(i) + "\n"); 
     } 
     } 
    }  
    } 
    Collections.sort(contactlist); 
    itemAdapter.notifyDataSetChanged(); 
    cursor.close(); 
} 
} 

的問題是,我有在恰當的順序的ListView的電話類型和電子郵件類型。這意味着我救2號[家庭,手機]和2個電子郵件[家庭,工作]到特定contact.When我運行此聯繫人的ListView控件顯示成爲數字[手機,工作]和代碼電子郵件[手機,工作]。我無法更正代碼。如何使ListView顯示正確。任何人都知道如何調試它?

+0

我不明白....是數字不正確的?手機號碼是否顯示爲工作號碼?或者他們是正確的,你只是希望他們以不同的順序顯示? – Barak

+0

實際上顯示包括5個詳細信息...名稱,NumberType,數字,EmailTYPE,電子郵件...這意味着數字類型意味着個人號碼或家庭號碼或移動...電子郵件類型也是這樣的....它是在不正確的順序..這裏有一個圖像,我保存了2個數字和2個電子郵件聯繫KARTHIK ---第一個數字類型是家庭第二數字類型移動和第一個電子郵件類型家庭和2工作,但它顯示爲移動和工作電話和電子郵件(http://tinypic.com/view.php?pic=2eydeli&s=6) – Hari

+0

發佈您的適配器代碼,它可能是在那裏。同時檢查你的數據...如果它在其他地方工作,但不是這個聯繫人,當你創建這個聯繫人時(或者對我而言),很可能你將信息保存爲錯誤的類型。 – Barak

回答

0

的問題是在你的循環......你只需要爲每個項目一個變量,你每次都通過重新設置它。

當你去創建的字符串添加到您的列表視圖,你只有在最後一次迭代通過每個循環的價值。

你應該大部分字符串創建的進入這些循環。

在循環外啓動字符串,設置聯繫人姓名,然後在每次迭代中通過電話號碼循環添加電話號碼(和類型),然後將電子郵件(和類型)添加到每個字符串上迭代通過電子郵件循環。

編輯

我想這是你想要的東西:

private void readContacts() { 
    ContentResolver cr = getContentResolver(); 
    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
      null, null, null); 

    while (cursor.moveToNext()) { 
     displayName = ""; 

     displayName = cursor 
       .getString(cursor 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
     String id = cursor.getString(cursor 
       .getColumnIndex(ContactsContract.Contacts._ID)); 
     String holder = ""; 
     holder = holder + displayName; 

     /* Phone Number and Type */ 

     if (Integer 
       .parseInt(cursor.getString(cursor 
         .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()) { 

       contactPhoneType = pCur 
         .getInt(pCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 

       switch (contactPhoneType) { 
       case ContactsContract.CommonDataKinds.Phone.TYPE_HOME: 
        holder = holder + ", Home"; 
        break; 
       case ContactsContract.CommonDataKinds.Phone.TYPE_WORK: 
        holder = holder + ", Work"; 
        break; 
       case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE: 
        holder = holder + ", Mobile"; 
        break; 
       case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER: 
        holder = holder + ", Other"; 
        break; 
       } 
       holder = holder 
         + ", " 
         + (pCur.getString(pCur 
           .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
      } 
      pCur.close(); 
     } 

     /* Email */ 
     Cursor emails = cr.query(Email.CONTENT_URI, null, Email.CONTACT_ID 
       + " = " + id, null, null); 
     while (emails.moveToNext()) { 
      int contactPhoneType = emails 
        .getInt(emails 
          .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
      switch (contactPhoneType) { 
      case ContactsContract.CommonDataKinds.Email.TYPE_HOME: 
       holder = holder + ", Home"; 
       break; 
      case ContactsContract.CommonDataKinds.Email.TYPE_WORK: 
       holder = holder + ", Work"; 
       break; 
      case ContactsContract.CommonDataKinds.Email.TYPE_MOBILE: 
       holder = holder + ", Mobile"; 
       break; 
      case ContactsContract.CommonDataKinds.Email.TYPE_OTHER: 
       holder = holder + ", Other"; 
       break; 
      } 
      holder = holder 
        + ", " 
        + (emails 
          .getString(emails 
            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))); 
     } 
     emails.close(); 
     contactlist.add(holder); 
    } 
    Collections.sort(contactlist); 
    itemAdapter.notifyDataSetChanged(); 
    cursor.close(); 
} 
+0

檢查上述評論我貼我的部分,並檢查你得到了idea.I所有類型的編輯位點都沒有atmost圖像鏈接但沒有use.you需要完整的編碼? – Hari

+0

幫助我,我沒有得到答案 – Hari

+0

巴拉克你得到的答案,我沒有得到答案,讓我知道那裏是實際的問題? – Hari