我試圖訪問在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顯示正確。任何人都知道如何調試它?
我不明白....是數字不正確的?手機號碼是否顯示爲工作號碼?或者他們是正確的,你只是希望他們以不同的順序顯示? – Barak
實際上顯示包括5個詳細信息...名稱,NumberType,數字,EmailTYPE,電子郵件...這意味着數字類型意味着個人號碼或家庭號碼或移動...電子郵件類型也是這樣的....它是在不正確的順序..這裏有一個圖像,我保存了2個數字和2個電子郵件聯繫KARTHIK ---第一個數字類型是家庭第二數字類型移動和第一個電子郵件類型家庭和2工作,但它顯示爲移動和工作電話和電子郵件(http://tinypic.com/view.php?pic=2eydeli&s=6) – Hari
發佈您的適配器代碼,它可能是在那裏。同時檢查你的數據...如果它在其他地方工作,但不是這個聯繫人,當你創建這個聯繫人時(或者對我而言),很可能你將信息保存爲錯誤的類型。 – Barak