2012-06-28 100 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